diff --git a/src/components/drop-down-buttons/index.tsx b/src/components/drop-down-buttons/index.tsx index 84cedb4a..8cf7af7b 100644 --- a/src/components/drop-down-buttons/index.tsx +++ b/src/components/drop-down-buttons/index.tsx @@ -123,7 +123,7 @@ const DropdownButtons: React.FC< menu={{ onClick: handleMenuClick, items: _.tail(items).map((item: any) => ({ - ...item, + ..._.omit(item, ['label', 'locale']), ...item.props, label: item.locale || item.locale === undefined diff --git a/src/components/logs-viewer/virtual-log-list.tsx b/src/components/logs-viewer/virtual-log-list.tsx index c84d7b2a..9c65371a 100644 --- a/src/components/logs-viewer/virtual-log-list.tsx +++ b/src/components/logs-viewer/virtual-log-list.tsx @@ -71,7 +71,6 @@ const LogsViewer: React.FC = forwardRef((props, ref) => { }; const setCurrentData = (lines: string[]) => { - console.log('setCurrentData', lines); const dataList = lines.map((line, index) => { return { content: line, @@ -140,7 +139,6 @@ const LogsViewer: React.FC = forwardRef((props, ref) => { const handleonToFirst = useCallback(() => { pageRef.current = 1; getCurrent(); - console.log('pageRef.current', pageRef.current); setScrollPos(['top', pageRef.current]); scrollPosRef.current = { pos: 'top', @@ -182,13 +180,6 @@ const LogsViewer: React.FC = forwardRef((props, ref) => { async (data: { isTop: boolean; isBottom: boolean }) => { const { isTop, isBottom } = data; setIsAtTop(isTop); - console.log('scroll========', { - isTop, - isBottom, - loadMoreDone: loadMoreDone.current, - loading: loading, - lineCount: lineCountRef.current - }); if (isBottom) { scrollPosRef.current = { pos: 'bottom', diff --git a/src/locales/en-US/models.ts b/src/locales/en-US/models.ts index 0a0ace2b..e65499ac 100644 --- a/src/locales/en-US/models.ts +++ b/src/locales/en-US/models.ts @@ -280,6 +280,6 @@ export default { 'models.form.backend.helperText': 'Not enabled yet. Will be enabled after deployment. ', 'models.table.instance.benchmark': 'Run Benchmark', - 'models.table.modelView': 'Model View', - 'models.table.instanceView': 'Instance View' + 'models.table.modelView': 'Model List', + 'models.table.instanceView': 'Instance List' }; diff --git a/src/locales/ja-JP/models.ts b/src/locales/ja-JP/models.ts index c444daf2..bbc24c0e 100644 --- a/src/locales/ja-JP/models.ts +++ b/src/locales/ja-JP/models.ts @@ -280,8 +280,8 @@ export default { 'models.form.backend.helperText': 'Not enabled yet. Will be enabled after deployment. ', 'models.table.instance.benchmark': 'Run Benchmark', - 'models.table.modelView': 'Model View', - 'models.table.instanceView': 'Instance View' + 'models.table.modelView': 'Model List', + 'models.table.instanceView': 'Instance List' }; // ========== To-Do: Translate Keys (Remove After Translation) ========== diff --git a/src/locales/ru-RU/models.ts b/src/locales/ru-RU/models.ts index 0a0d2727..b3d368ce 100644 --- a/src/locales/ru-RU/models.ts +++ b/src/locales/ru-RU/models.ts @@ -284,8 +284,8 @@ export default { 'models.form.backend.helperText': 'Not enabled yet. Will be enabled after deployment. ', 'models.table.instance.benchmark': 'Run Benchmark', - 'models.table.modelView': 'Model View', - 'models.table.instanceView': 'Instance View' + 'models.table.modelView': 'Model List', + 'models.table.instanceView': 'Instance List' }; // ========== To-Do: Translate Keys (Remove After Translation) ========== @@ -296,6 +296,6 @@ export default { // 3. 'models.form.enableModelRoute.tips': 'Enable Model Route', // 4. 'models.form.backend.vllm': 'Built-in support for NVIDIA, AMD, Ascend, Hygon, Moore Threads, Iluvatar, MetaX, T-Head PPU devices.', // 5. 'models.form.backend.sglang': 'Built-in support for NVIDIA, AMD, Ascend, Moore Threads, MetaX, T-Head PPU devices.', -// 6. 'models.table.modelView': 'Model View', -// 7. 'models.table.instanceView': 'Instance View' +// 6. 'models.table.modelView': 'Model List', +// 7. 'models.table.instanceView': 'Instance List' // ========== End of To-Do List ========== diff --git a/src/locales/zh-CN/models.ts b/src/locales/zh-CN/models.ts index f9e1eb61..996b2071 100644 --- a/src/locales/zh-CN/models.ts +++ b/src/locales/zh-CN/models.ts @@ -264,6 +264,6 @@ export default { 'models.form.maxContextLength': '最大上下文长度', 'models.form.backend.helperText': '该社区后端暂未启用,部署后将自动启用', 'models.table.instance.benchmark': '运行基准测试', - 'models.table.modelView': '模型视图', - 'models.table.instanceView': '实例视图' + 'models.table.modelView': '模型列表', + 'models.table.instanceView': '实例列表' }; diff --git a/src/pages/_components/page-box.tsx b/src/pages/_components/page-box.tsx index fe44d4dd..f31900ca 100644 --- a/src/pages/_components/page-box.tsx +++ b/src/pages/_components/page-box.tsx @@ -32,7 +32,7 @@ export const PageContainerInner: React.FC = ({ return ( ) => { @@ -108,14 +109,15 @@ const WorkerInfo = (props: { const NameCell: React.FC = ({ record, modelData, - defaultOpenId + defaultOpenId, + showWorkerInfo = true }) => { return ( {record.name} - {!!record.worker_id && ( + {!!record.worker_id && showWorkerInfo && ( = (props) => { } - zIndex={3000} open={open} centered={true} onCancel={handleCancel} diff --git a/src/pages/llmodels/instance-view/index.tsx b/src/pages/llmodels/instance-view/index.tsx index eacd35dd..6c3d3816 100644 --- a/src/pages/llmodels/instance-view/index.tsx +++ b/src/pages/llmodels/instance-view/index.tsx @@ -53,7 +53,9 @@ const InstanceView = forwardRef((props, ref) => { const handleSelect = useMemoizedFn((val: any, row: ListItem) => { if (val === 'delete') { - handleDelete(row); + handleDelete(row, { + okText: 'common.button.delrecreate' + }); } if (val === 'viewlog') { @@ -151,6 +153,7 @@ const InstanceView = forwardRef((props, ref) => { ) => { - return _.sum(_.values(vram)); +const WorkerInfoContent: React.FC = ({ record, modelData }) => { + let workerIp = '-'; + if (record.worker_ip) { + workerIp = record.port + ? `${record.worker_ip}:${record.port}` + : record.worker_ip; + } + return ( +
+
{record.worker_name}
+ {/*
+ + {workerIp} +
*/} +
+ + + GPU:[ + {_.join( + record.gpu_indexes?.sort?.((a, b) => a - b), + ',' + )} + ] + +
+ {/*
+ + + {record?.backend || modelData?.backend || ''} + {record.backend_version || modelData?.backend_version + ? `(${record.backend_version || modelData?.backend_version})` + : ''} + +
*/} +
+ ); }; const useProviderColumns = (options: { @@ -35,6 +81,21 @@ const useProviderColumns = (options: { const intl = useIntl(); const { workerList, clusterList, handleSelect, onCellClick } = options; + const renderWorkerCell = (text: number, record: ListItem) => { + if (text) { + return ( + + ); + } + return null; + }; + return useMemo(() => { return [ { @@ -43,13 +104,28 @@ const useProviderColumns = (options: { sorter: tableSorter(1), minWidth: 160, render: (value: string, record: ListItem) => ( - + <> + +
+ + + {record?.backend || record?.backend || ''} + {record.backend_version || record?.backend_version + ? `(${record.backend_version || record?.backend_version})` + : ''} + +
+ ) }, { @@ -67,19 +143,14 @@ const useProviderColumns = (options: { { title: intl.formatMessage({ id: 'resources.worker' }), dataIndex: 'worker_id', - minWidth: 200, render: (text, record) => ( - - {text && - (!record.distributed_servers?.subordinate_workers || - !record.distributed_servers?.subordinate_workers.length) - ? workerList.find((worker) => worker.id === text)?.name - : ''} +
+ {renderWorkerCell(text, record)} - +
) }, { @@ -89,9 +160,7 @@ const useProviderColumns = (options: { render: (text, record) => ( {convertFileSize( - record.computed_resource_claim?.vram - ? calcTotalVram(record.computed_resource_claim?.vram) - : 0, + record.computed_resource_claim?.vram ? calcTotalVram(record) : 0, 1 )} @@ -128,7 +197,7 @@ const useProviderColumns = (options: { title: intl.formatMessage({ id: 'common.table.operation' }), dataIndex: 'operations', span: 3, - minWidth: 120, + width: 120, render: (value: string, record: ListItem) => ( { worker_selector: null }; }; + +export const calcTotalVram = (record: any) => { + const vramInMain = _.sum( + _.values(record.computed_resource_claim?.vram || {}) + ); + const vramInDistributed = _.sum( + _.values(record.distributed_servers?.subordinate_workers || []).map( + (item: any) => _.sum(_.values(item.computed_resource_claim?.vram || {})) + ) + ); + return vramInMain + vramInDistributed; +};