From 34331063ebf56db576a44d1726292b98d83f6c76 Mon Sep 17 00:00:00 2001 From: jialin Date: Sun, 18 Jan 2026 17:30:18 +0800 Subject: [PATCH] feat: provider lsit --- config/routes.ts | 2 +- src/components/page-tools/index.tsx | 4 +- src/locales/en-US/menu.ts | 1 + src/locales/en-US/provider.ts | 6 ++ src/locales/ja-JP/menu.ts | 3 +- src/locales/ja-JP/provider.ts | 6 ++ src/locales/ru-RU/menu.ts | 5 ++ src/locales/ru-RU/provider.ts | 6 ++ src/locales/zh-CN/menu.ts | 1 + src/locales/zh-CN/provider.ts | 6 ++ .../components/provider-models.tsx | 4 +- src/pages/maas-provider/config/index.ts | 13 ++-- src/pages/maas-provider/config/mock.ts | 50 +++++++++++++++ src/pages/maas-provider/config/types.ts | 2 + .../hooks/use-provider-columns.tsx | 64 +++++++------------ src/pages/maas-provider/index.tsx | 17 +++-- 16 files changed, 135 insertions(+), 55 deletions(-) create mode 100644 src/locales/en-US/provider.ts create mode 100644 src/locales/ja-JP/provider.ts create mode 100644 src/locales/ru-RU/provider.ts create mode 100644 src/locales/zh-CN/provider.ts create mode 100644 src/pages/maas-provider/config/mock.ts diff --git a/config/routes.ts b/config/routes.ts index 6b4b405e..0923eb0e 100644 --- a/config/routes.ts +++ b/config/routes.ts @@ -106,7 +106,7 @@ export default [ component: './llmodels/index' }, { - name: 'provider', + name: 'providers', path: '/models/providers', key: 'modelProviders', icon: 'icon-extension-outline', diff --git a/src/components/page-tools/index.tsx b/src/components/page-tools/index.tsx index 177986b6..2eb2fa08 100644 --- a/src/components/page-tools/index.tsx +++ b/src/components/page-tools/index.tsx @@ -157,9 +157,7 @@ export const FilterBar: React.FC = (props) => { actionType === 'dropdown' ? ( >>>>>> ddf1a270 (feat: provider lsit) // ========== End of To-Do List ========== diff --git a/src/locales/ru-RU/provider.ts b/src/locales/ru-RU/provider.ts new file mode 100644 index 00000000..9aa637bb --- /dev/null +++ b/src/locales/ru-RU/provider.ts @@ -0,0 +1,6 @@ +export default { + 'providers.title': 'Providers', + 'providers.button.add': 'Add Provider', + 'providers.table.providerName': 'Provider', + 'providers.table.modelsCounts': 'Models Count' +}; diff --git a/src/locales/zh-CN/menu.ts b/src/locales/zh-CN/menu.ts index 17948eee..c3afc381 100644 --- a/src/locales/zh-CN/menu.ts +++ b/src/locales/zh-CN/menu.ts @@ -16,6 +16,7 @@ export default { 'menu.models.benchmark': '基准测试', 'menu.models.benchmarkDetail': '基准测试详情', 'menu.models.provider': '渠道', + 'menu.models.providers': '渠道', 'menu.modelCatalog': '模型库', 'menu.models.catalog': '模型库', 'menu.resources': '资源', diff --git a/src/locales/zh-CN/provider.ts b/src/locales/zh-CN/provider.ts new file mode 100644 index 00000000..ccbe338f --- /dev/null +++ b/src/locales/zh-CN/provider.ts @@ -0,0 +1,6 @@ +export default { + 'providers.title': '渠道', + 'providers.button.add': '添加渠道', + 'providers.table.providerName': '渠道', + 'providers.table.modelsCounts': '模型数量' +}; diff --git a/src/pages/maas-provider/components/provider-models.tsx b/src/pages/maas-provider/components/provider-models.tsx index 81f1b8f1..a5f09d57 100644 --- a/src/pages/maas-provider/components/provider-models.tsx +++ b/src/pages/maas-provider/components/provider-models.tsx @@ -1,7 +1,9 @@ import React from 'react'; interface ProviderModelProps { - name: string; + dataList: any[]; + provider: string; + providerId: number; } const ProviderModels: React.FC = () => { diff --git a/src/pages/maas-provider/config/index.ts b/src/pages/maas-provider/config/index.ts index ea32d85b..a26b6a89 100644 --- a/src/pages/maas-provider/config/index.ts +++ b/src/pages/maas-provider/config/index.ts @@ -25,7 +25,7 @@ export const maasProviderLabelMap = { [maasProviderValueMap.Anthropic]: 'Anthropic' }; -export const IconsMap = { +export const providerIconsMap = { [maasProviderValueMap.Doubao]: 'icon-doubao', [maasProviderValueMap.Qwen]: 'icon-qwen', [maasProviderValueMap.OpenAI]: 'icon-openai', @@ -33,10 +33,13 @@ export const IconsMap = { [maasProviderValueMap.Anthropic]: 'icon-anthropic' }; -export const maasProviderOptions = Object.keys(maasProviderValueMap).map( - (key) => ({ - label: maasProviderLabelMap[key], - value: maasProviderValueMap[key as keyof typeof maasProviderValueMap] +export const maasProviderOptions = Object.entries(maasProviderValueMap).map( + ([key, value]) => ({ + label: maasProviderLabelMap[value], + value: value, + key: value, + locale: false, + icon: providerIconsMap[value] }) ); diff --git a/src/pages/maas-provider/config/mock.ts b/src/pages/maas-provider/config/mock.ts new file mode 100644 index 00000000..aa2004d9 --- /dev/null +++ b/src/pages/maas-provider/config/mock.ts @@ -0,0 +1,50 @@ +import { MaasProviderItem } from '../config/types'; + +// mock data for MaasProviderItem 5 items +export const mockDataList: MaasProviderItem[] = [ + { + id: 1, + name: 'Doubao', + state: 'Ready', + models: 5, + state_message: '', + provider: 'doubao', + builtIn: false + }, + { + id: 2, + models: 3, + name: 'Qwen', + state: 'Inactive', + state_message: 'Provider is inactive', + provider: 'qwen', + builtIn: true + }, + { + id: 3, + models: 8, + name: 'OpenAI', + state: 'Ready', + state_message: '', + provider: 'openai', + builtIn: false + }, + { + id: 4, + models: 2, + name: 'Deepseek', + state: 'Ready', + state_message: '', + provider: 'deepseek', + builtIn: false + }, + { + id: 5, + models: 4, + name: 'Anthropic', + state: 'Inactive', + state_message: 'Provider is inactive', + provider: 'anthropic', + builtIn: true + } +]; diff --git a/src/pages/maas-provider/config/types.ts b/src/pages/maas-provider/config/types.ts index 9fcb9ced..9f605b35 100644 --- a/src/pages/maas-provider/config/types.ts +++ b/src/pages/maas-provider/config/types.ts @@ -3,9 +3,11 @@ import { maasProviderType } from '.'; export interface MaasProviderItem { id: number; name: string; + models?: number; state: string; state_message: string; provider: maasProviderType; + builtIn: boolean; } export interface FormData { diff --git a/src/pages/maas-provider/hooks/use-provider-columns.tsx b/src/pages/maas-provider/hooks/use-provider-columns.tsx index 561f97fc..64ef8f04 100644 --- a/src/pages/maas-provider/hooks/use-provider-columns.tsx +++ b/src/pages/maas-provider/hooks/use-provider-columns.tsx @@ -1,15 +1,17 @@ // columns.ts import AutoTooltip from '@/components/auto-tooltip'; import DropdownButtons from '@/components/drop-down-buttons'; +import IconFont from '@/components/icon-font'; import { SealColumnProps } from '@/components/seal-table/types'; import StatusTag from '@/components/status-tag'; import { tableSorter } from '@/config/settings'; -import { StarFilled } from '@ant-design/icons'; import { useIntl } from '@umijs/max'; -import { Tooltip } from 'antd'; +import { Tag } from 'antd'; import dayjs from 'dayjs'; import { useMemo } from 'react'; import { + maasProviderLabelMap, + providerIconsMap, ProviderStatus, ProviderStatusLabelMap, rowActionList @@ -28,66 +30,48 @@ const useProviderColumns = ( title: intl.formatMessage({ id: 'common.table.name' }), dataIndex: 'name', sorter: tableSorter(1), - span: 3, + span: 5, render: (text: string, record: MaasProviderItem) => ( <> {text} - {record.is_default && ( - - - + {record.builtIn && ( + + BuiltIn + )} ) }, { - title: intl.formatMessage({ id: 'clusters.table.provider' }), + title: intl.formatMessage({ id: 'providers.table.providerName' }), dataIndex: 'provider', sorter: tableSorter(2), - span: 3, + span: 4, render: (value: string) => ( - - {ProviderStatusLabelMap[value]} - + <> + + + {maasProviderLabelMap[value]} + + ) }, { - title: 'GPUs', - dataIndex: 'gpus', - span: 2, + title: intl.formatMessage({ id: 'providers.table.modelsCounts' }), + dataIndex: 'models', + span: 3, sorter: tableSorter(3), render: (value: number) => {value} }, - { - title: intl.formatMessage({ id: 'clusters.table.deployments' }), - dataIndex: 'models', - sorter: tableSorter(4), - span: 3, - render: (value: number) => {value} - }, - { - title: intl.formatMessage({ id: 'resources.nodes' }), - dataIndex: 'workers', - sorter: tableSorter(5), - span: 3, - render: (value: number, record: MaasProviderItem) => ( - - {record.ready_workers} / {record.workers} - - ) - }, { title: intl.formatMessage({ id: 'common.table.status' }), dataIndex: 'state', - span: 3, + span: 4, render: (value: string, record: MaasProviderItem) => ( { deleteAPI: deleteProvider, watch: true, API: MAAS_PROVIDERS_API, - contentForDelete: 'menu.clusterManagement.clusters' + contentForDelete: 'menu.models.providers' }); const { watchDataList: allProviderModels } = useWatchList(PROVIDER_MODELS_API); @@ -166,7 +168,7 @@ const MaasProvider: React.FC = () => { ); }; @@ -177,16 +179,23 @@ const MaasProvider: React.FC = () => { <> ({ + ...option, + icon: ( + + ) + }))} > { renderChildren={renderChildren} onTableSort={handleOnSortChange} showSorterTooltip={false} - dataSource={dataSource.dataList} + dataSource={mockDataList} loading={dataSource.loading} loadend={dataSource.loadend} rowSelection={rowSelection}