From e89c23da4d20d5139352e30c1b00fd0b2e986415 Mon Sep 17 00:00:00 2001 From: zhaoying Date: Wed, 28 Jan 2026 18:41:56 +0800 Subject: [PATCH] fix(web): model bugfix --- web/src/assets/images/model/bedrock.svg | 15 ++++ web/src/assets/images/model/dashscope.png | Bin 0 -> 2835 bytes web/src/assets/images/model/gpustack.png | Bin 0 -> 57988 bytes web/src/assets/images/model/ollama.svg | 15 ++++ web/src/assets/images/model/openai.svg | 4 + web/src/assets/images/model/xinference.svg | 24 ++++++ web/src/views/ModelManagement/List.tsx | 26 +++--- web/src/views/ModelManagement/Square.tsx | 40 ++++++---- .../components/ModelListDetail.tsx | 23 +++--- .../components/ModelSquareDetail.tsx | 74 ++++++++++-------- web/src/views/ModelManagement/utils.ts | 26 ++++++ 11 files changed, 177 insertions(+), 70 deletions(-) create mode 100644 web/src/assets/images/model/bedrock.svg create mode 100644 web/src/assets/images/model/dashscope.png create mode 100644 web/src/assets/images/model/gpustack.png create mode 100644 web/src/assets/images/model/ollama.svg create mode 100644 web/src/assets/images/model/openai.svg create mode 100644 web/src/assets/images/model/xinference.svg create mode 100644 web/src/views/ModelManagement/utils.ts diff --git a/web/src/assets/images/model/bedrock.svg b/web/src/assets/images/model/bedrock.svg new file mode 100644 index 00000000..6a0235af --- /dev/null +++ b/web/src/assets/images/model/bedrock.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/web/src/assets/images/model/dashscope.png b/web/src/assets/images/model/dashscope.png new file mode 100644 index 0000000000000000000000000000000000000000..c1aff40ee092ae1758ad72d592081cc6b99c5b54 GIT binary patch literal 2835 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 literal 0 HcmV?d00001 diff --git a/web/src/assets/images/model/gpustack.png b/web/src/assets/images/model/gpustack.png new file mode 100644 index 0000000000000000000000000000000000000000..b154821db91ab02007d7c48700dea34d57871ec6 GIT binary patch literal 57988 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

edBnRuu(@m|j_~Qk1q_=Uy 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 WV5hA3PnA6Y0000 + + + + + + + + + + + + + + diff --git a/web/src/assets/images/model/openai.svg b/web/src/assets/images/model/openai.svg new file mode 100644 index 00000000..70686f9b --- /dev/null +++ b/web/src/assets/images/model/openai.svg @@ -0,0 +1,4 @@ + + + + diff --git a/web/src/assets/images/model/xinference.svg b/web/src/assets/images/model/xinference.svg new file mode 100644 index 00000000..f5c5f75e --- /dev/null +++ b/web/src/assets/images/model/xinference.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/src/views/ModelManagement/List.tsx b/web/src/views/ModelManagement/List.tsx index f1127623..ac85125a 100644 --- a/web/src/views/ModelManagement/List.tsx +++ b/web/src/views/ModelManagement/List.tsx @@ -1,5 +1,5 @@ import { useRef, useState, useEffect, type FC } from 'react'; -import { Button, Space, Row, Col } from 'antd' +import { Button, Flex, Row, Col } from 'antd' import { useTranslation } from 'react-i18next'; import type { ProviderModelItem, KeyConfigModalRef, ModelListDetailRef } from './types' @@ -9,6 +9,7 @@ import PageEmpty from '@/components/Empty/PageEmpty'; import Tag from '@/components/Tag'; import KeyConfigModal from './components/KeyConfigModal' import ModelListDetail from './components/ModelListDetail' +import { getLogoUrl } from './utils' const ModelList: FC<{ query: any }> = ({ query }) => { const { t } = useTranslation(); @@ -46,22 +47,25 @@ const ModelList: FC<{ query: any }> = ({ query }) => { {item.provider[0]} } + bodyClassName="rb:relative rb:pb-[64px]! rb:h-[calc(100%-64px)]!" > - {item.tags.map(tag => {t(`modelNew.${tag}`)})} - - - - - - - - + {item.tags.map(tag => {t(`modelNew.${tag}`)})} +

+ + + + + + + + +
))} diff --git a/web/src/views/ModelManagement/Square.tsx b/web/src/views/ModelManagement/Square.tsx index 7ecd838c..af72700f 100644 --- a/web/src/views/ModelManagement/Square.tsx +++ b/web/src/views/ModelManagement/Square.tsx @@ -1,5 +1,5 @@ import { useRef, useState, useEffect, forwardRef, useImperativeHandle } from 'react'; -import { Button, Space, App, Divider, Flex } from 'antd' +import { Button, Space, App, Divider, Flex, Tooltip } from 'antd' import { UsergroupAddOutlined } from '@ant-design/icons'; import { useTranslation } from 'react-i18next'; @@ -9,6 +9,7 @@ import { getModelPlaza, addModelPlaza } from '@/api/models' import PageEmpty from '@/components/Empty/PageEmpty'; import Tag from '@/components/Tag'; import ModelSquareDetail from './components/ModelSquareDetail' +import { getLogoUrl } from './utils' const ModelSquare = forwardRef void; }>(({ query, handleEdit }, ref) => { const { t } = useTranslation(); @@ -46,7 +47,7 @@ const ModelSquare = forwardRef (
-
{vo.provider}
+
{t(`modelNew.${vo.provider}`)}
@@ -55,27 +56,32 @@ const ModelSquare = forwardRef {t(`modelNew.${item.type}`)}} + avatarUrl={getLogoUrl(item.logo)} avatar={
{item.name[0]}
} + bodyClassName="rb:relative rb:pb-[80px]! rb:h-[calc(100%-64px)]!" > - {t(`modelNew.${item.type}`)} -
{item.description}
- {item.tags.map((tag, tagIndex) => {tag})} - - - {item.add_count} - - {!item.is_official && } - {item.is_added - ? - : - } - - + +
{item.description}
+
+ {item.tags.map((tag, tagIndex) => {tag})} +
+ + + {item.add_count} + + {!item.is_official && } + {item.is_added + ? + : + } + + +
))}
diff --git a/web/src/views/ModelManagement/components/ModelListDetail.tsx b/web/src/views/ModelManagement/components/ModelListDetail.tsx index 48abd953..9d4303f8 100644 --- a/web/src/views/ModelManagement/components/ModelListDetail.tsx +++ b/web/src/views/ModelManagement/components/ModelListDetail.tsx @@ -1,6 +1,6 @@ import { useState, useImperativeHandle, forwardRef, useRef } from 'react'; import { useTranslation } from 'react-i18next'; -import { Button, Switch, Row, Col, Space } from 'antd' +import { Button, Switch, Row, Col, Space, Tooltip } from 'antd' import type { ProviderModelItem, ModelListItem, ModelListDetailRef, MultiKeyConfigModalRef } from '../types'; import RbDrawer from '@/components/RbDrawer'; @@ -9,6 +9,7 @@ import Tag from '@/components/Tag'; import PageEmpty from '@/components/Empty/PageEmpty'; import MultiKeyConfigModal from './MultiKeyConfigModal' import { getModelNewList, updateModelStatus } from '@/api/models' +import { getLogoUrl } from '../utils' interface ModelListDetailProps { refresh?: () => void; @@ -80,21 +81,25 @@ const ModelListDetail = forwardRef(({ {t(`modelNew.${item.type}`)} {item.api_keys.length}{t('modelNew.apiKeyNum')} } - avatarUrl={item.logo} + avatarUrl={getLogoUrl(item.logo)} avatar={
{item.name[0]}
} extra={ handleChange(item)} />} + bodyClassName="rb:relative rb:pb-[64px]! rb:h-[calc(100%-64px)]!" > - -
{item.description}
- - - - - + +
{item.description}
+
+
+ + + + + +
))} diff --git a/web/src/views/ModelManagement/components/ModelSquareDetail.tsx b/web/src/views/ModelManagement/components/ModelSquareDetail.tsx index d7a5f807..844339fb 100644 --- a/web/src/views/ModelManagement/components/ModelSquareDetail.tsx +++ b/web/src/views/ModelManagement/components/ModelSquareDetail.tsx @@ -1,6 +1,6 @@ import { useState, useImperativeHandle, forwardRef } from 'react'; import { useTranslation } from 'react-i18next'; -import { Button, Space, App, Flex } from 'antd' +import { Button, Space, App, Flex, Tooltip, Divider } from 'antd' import { UsergroupAddOutlined } from '@ant-design/icons'; import type { ModelPlaza, ModelPlazaItem, ModelSquareDetailRef } from '../types'; @@ -9,6 +9,7 @@ import { getModelPlaza, addModelPlaza } from '@/api/models' import RbCard from '@/components/RbCard/Card' import Tag from '@/components/Tag'; import PageEmpty from '@/components/Empty/PageEmpty'; +import { getLogoUrl } from '../utils' interface ModelSquareDetailProps { refresh: () => void; @@ -52,42 +53,49 @@ const ModelSquareDetail = forwardRef{model.provider} {t('modelNew.modelList')} ({list.length}{t('modelNew.item')})} + title={<>{t(`modelNew.${model.provider}`)} {t('modelNew.modelList')} ({list.length}{t('modelNew.item')})} open={open} onClose={handleClose} > - {list.length === 0 - ? - :
- {list.map(item => ( - - {item.name[0]} +
+ {list.length === 0 + ? + :
+ {list.map(item => ( + {t(`modelNew.${item.type}`)}} + avatarUrl={getLogoUrl(item.logo)} + avatar={ +
+ {item.name[0]} +
+ } + bodyClassName="rb:relative rb:pb-[80px]! rb:h-[calc(100%-64px)]!" + > + +
{item.description}
+
+ {item.tags.map((tag, tagIndex) => {tag})} +
+ + + {item.add_count} + + {!item.is_official && } + {item.is_added + ? + : + } + +
- } - > - {t(`modelNew.${item.type}`)} -
{item.description}
- {item.tags.map((tag, tagIndex) => {tag})} - - - {item.add_count} - - {!item.is_official && } - {item.is_added - ? - : - } - - -
- ))} -
- } + + ))} +
+ } +
); }); diff --git a/web/src/views/ModelManagement/utils.ts b/web/src/views/ModelManagement/utils.ts new file mode 100644 index 00000000..c753a8b6 --- /dev/null +++ b/web/src/views/ModelManagement/utils.ts @@ -0,0 +1,26 @@ +import bedrockIcon from '@/assets/images/model/bedrock.svg' +import dashscopeIcon from '@/assets/images/model/dashscope.png' +import gpustackIcon from '@/assets/images/model/gpustack.png' +import ollamaIcon from '@/assets/images/model/ollama.svg' +import openaiIcon from '@/assets/images/model/openai.svg' +import xinferenceIcon from '@/assets/images/model/xinference.svg' + +export const ICONS = { + bedrock: bedrockIcon, + dashscope: dashscopeIcon, + gpustack: gpustackIcon, + ollama: ollamaIcon, + openai: openaiIcon, + xinference: xinferenceIcon +} + +export const getLogoUrl = (logo?: string) => { + if (!logo) { + return undefined + } + if (logo.startsWith('http')) { + return logo + } + + return ICONS[logo as keyof typeof ICONS] || undefined +} \ No newline at end of file