import { convertFileSize } from '@/utils'; import { HddFilled, InfoCircleOutlined, PieChartFilled, ThunderboltFilled } from '@ant-design/icons'; import { AutoTooltip, IconFont } from '@gpustack/core-ui'; import { useIntl } from '@umijs/max'; import { Tooltip } from 'antd'; import _ from 'lodash'; import React, { useEffect } from 'react'; import { ModelInstanceListItem } from '../../config/types'; import '../../style/instance-item.less'; export interface NameCellProps { record: ModelInstanceListItem; modelData: any; defaultOpenId?: string; showWorkerInfo?: boolean; styles?: { label?: React.CSSProperties; }; } const calcTotalVram = (vram: Record) => { return _.sum(_.values(vram)); }; const WorkerInfoContent: React.FC = ({ record, modelData }) => { const intl = useIntl(); let workerIp = '-'; if (record.worker_ip) { workerIp = record.port ? `${record.worker_ip}:${record.port}` : record.worker_ip; } return (
{record.worker_name}
{workerIp}
{intl.formatMessage({ id: 'models.table.gpuindex' })}: [ {_.join( record.gpu_indexes?.sort?.((a, b) => a - b), ',' )} ]
{intl.formatMessage({ id: 'models.form.backend' })}:{' '} {record?.backend || modelData?.backend || ''} {record.backend_version || modelData?.backend_version ? `(${record.backend_version || modelData?.backend_version})` : ''}
{intl.formatMessage({ id: 'models.table.vram.allocated' })}:{' '} {convertFileSize( record.computed_resource_claim?.vram ? calcTotalVram(record.computed_resource_claim?.vram) : 0, 1 )}
); }; const WorkerInfo = (props: { title: React.ReactNode; defaultOpen: boolean; }) => { const [open, setOpen] = React.useState(props.defaultOpen); useEffect(() => { if (props.defaultOpen) { setTimeout(() => { setOpen(false); }, 1000); } }, [props.defaultOpen]); return ( ); }; const NameCell: React.FC = ({ record, modelData, defaultOpenId, showWorkerInfo = true, styles }) => { return ( {record.name} {!!record.worker_id && showWorkerInfo && ( } defaultOpen={defaultOpenId === record.name} > )} ); }; export default NameCell;