From d3f39ae06b5f368fa4e8080da41e1a7f311f6724 Mon Sep 17 00:00:00 2001 From: jialin Date: Mon, 13 Oct 2025 15:16:20 +0800 Subject: [PATCH] fix: my models --- src/components/icon-font/index.tsx | 2 +- src/components/seal-form/wrapper/index.tsx | 1 - src/components/seal-form/wrapper/slider.ts | 1 + src/locales/en-US/backends.ts | 3 +- src/locales/ja-JP/backends.ts | 3 +- src/locales/ru-RU/backends.ts | 3 +- src/locales/zh-CN/backends.ts | 3 +- .../components/add-apikey-modal/index.tsx | 17 +++++++-- src/pages/backends/forms/version-info.tsx | 2 +- src/pages/llmodels/apis/index.ts | 32 ++++++++++++++++ src/pages/llmodels/components/model-item.tsx | 38 +++++++++++++++---- src/pages/users/components/add-modal.tsx | 12 ++++-- src/pages/users/index.tsx | 2 +- 13 files changed, 97 insertions(+), 22 deletions(-) diff --git a/src/components/icon-font/index.tsx b/src/components/icon-font/index.tsx index 5e231a14..3c50209d 100644 --- a/src/components/icon-font/index.tsx +++ b/src/components/icon-font/index.tsx @@ -2,7 +2,7 @@ import { createFromIconfontCN } from '@ant-design/icons'; // import './iconfont/iconfont.js'; const IconFont = createFromIconfontCN({ - scriptUrl: '//at.alicdn.com/t/c/font_4613488_759c66g4c2g.js' + scriptUrl: '//at.alicdn.com/t/c/font_4613488_lg2z989p7f.js' }); export default IconFont; diff --git a/src/components/seal-form/wrapper/index.tsx b/src/components/seal-form/wrapper/index.tsx index 47b478b4..2d3fe728 100644 --- a/src/components/seal-form/wrapper/index.tsx +++ b/src/components/seal-form/wrapper/index.tsx @@ -158,7 +158,6 @@ const Inner = styled.div.attrs({ className: '__inner__' })` width: 100%; - display: flex; `; const Extra = styled.div` diff --git a/src/components/seal-form/wrapper/slider.ts b/src/components/seal-form/wrapper/slider.ts index 874bfc13..23c2a53a 100644 --- a/src/components/seal-form/wrapper/slider.ts +++ b/src/components/seal-form/wrapper/slider.ts @@ -6,6 +6,7 @@ const SliderWrapper = styled.div` height: 100%; justify-content: center; } + .borderless { background-color: transparent; } diff --git a/src/locales/en-US/backends.ts b/src/locales/en-US/backends.ts index 7bd6fa91..3d67d86a 100644 --- a/src/locales/en-US/backends.ts +++ b/src/locales/en-US/backends.ts @@ -22,5 +22,6 @@ export default { 'backend.form.defaultBackendParameters': 'Default Backend Parameters', 'backend.form.versionConfig': 'Versions Config', 'backend.form.addParameter': 'Add Parameter', - 'backend.form.noVersion': 'No versions added' + 'backend.form.noVersion': 'No versions added', + 'backend.noVersion': 'No versions found' }; diff --git a/src/locales/ja-JP/backends.ts b/src/locales/ja-JP/backends.ts index 7bd6fa91..3d67d86a 100644 --- a/src/locales/ja-JP/backends.ts +++ b/src/locales/ja-JP/backends.ts @@ -22,5 +22,6 @@ export default { 'backend.form.defaultBackendParameters': 'Default Backend Parameters', 'backend.form.versionConfig': 'Versions Config', 'backend.form.addParameter': 'Add Parameter', - 'backend.form.noVersion': 'No versions added' + 'backend.form.noVersion': 'No versions added', + 'backend.noVersion': 'No versions found' }; diff --git a/src/locales/ru-RU/backends.ts b/src/locales/ru-RU/backends.ts index 7bd6fa91..3d67d86a 100644 --- a/src/locales/ru-RU/backends.ts +++ b/src/locales/ru-RU/backends.ts @@ -22,5 +22,6 @@ export default { 'backend.form.defaultBackendParameters': 'Default Backend Parameters', 'backend.form.versionConfig': 'Versions Config', 'backend.form.addParameter': 'Add Parameter', - 'backend.form.noVersion': 'No versions added' + 'backend.form.noVersion': 'No versions added', + 'backend.noVersion': 'No versions found' }; diff --git a/src/locales/zh-CN/backends.ts b/src/locales/zh-CN/backends.ts index a20c8468..14764c4e 100644 --- a/src/locales/zh-CN/backends.ts +++ b/src/locales/zh-CN/backends.ts @@ -22,5 +22,6 @@ export default { 'backend.form.defaultBackendParameters': '默认后端参数', 'backend.form.versionConfig': '版本配置', 'backend.form.addParameter': '添加参数', - 'backend.form.noVersion': '尚未添加版本' + 'backend.form.noVersion': '未添加版本', + 'backend.noVersion': '未找到版本' }; diff --git a/src/pages/api-keys/components/add-apikey-modal/index.tsx b/src/pages/api-keys/components/add-apikey-modal/index.tsx index 74e8b582..02abb04e 100644 --- a/src/pages/api-keys/components/add-apikey-modal/index.tsx +++ b/src/pages/api-keys/components/add-apikey-modal/index.tsx @@ -6,7 +6,7 @@ import { PageAction } from '@/config'; import { PageActionType } from '@/config/types'; import ColumnWrapper from '@/pages/_components/column-wrapper'; import { useIntl } from '@umijs/max'; -import { Button, Form, Tag } from 'antd'; +import { Form, Tag } from 'antd'; import dayjs from 'dayjs'; import _ from 'lodash'; import { useEffect, useState } from 'react'; @@ -194,9 +194,18 @@ const AddModal: React.FC = ({ }} > ) : ( - + ) } > diff --git a/src/pages/backends/forms/version-info.tsx b/src/pages/backends/forms/version-info.tsx index e34f5b28..ddc375eb 100644 --- a/src/pages/backends/forms/version-info.tsx +++ b/src/pages/backends/forms/version-info.tsx @@ -174,7 +174,7 @@ const VersionList: React.FC<{ versionConfigs: VersionListItem[] }> = ({ )} diff --git a/src/pages/llmodels/apis/index.ts b/src/pages/llmodels/apis/index.ts index 2634bbf1..9a114e90 100644 --- a/src/pages/llmodels/apis/index.ts +++ b/src/pages/llmodels/apis/index.ts @@ -1,3 +1,4 @@ +import { ListItem as UserListItem } from '@/pages/users/config/types'; import { downloadFile, listFiles, listModels } from '@huggingface/hub'; import { PipelineType } from '@huggingface/tasks'; import { request } from '@umijs/max'; @@ -416,3 +417,34 @@ export async function queryBackendList(params?: { cluster_id: number }) { params }); } + +export async function queryModelAccessUserList(id: number) { + return request<{ items: UserListItem[] }>(`${MODELS_API}/${id}/access`, { + method: 'GET' + }); +} + +export async function updateModelAccessUser(params: { + id: number; + data: { users: { id: number }[]; set_public: boolean }; +}) { + return request(`${MODELS_API}/${params.id}/access`, { + method: 'POST', + data: params.data + }); +} + +export async function queryMyModels(params: Global.SearchParams) { + return request>( + `${MY_MODELS_API}?${qs.stringify(params)}`, + { + method: 'GET' + } + ); +} + +export async function queryMyModelDetail(id: number) { + return request(`${MY_MODELS_API}/${id}`, { + method: 'GET' + }); +} diff --git a/src/pages/llmodels/components/model-item.tsx b/src/pages/llmodels/components/model-item.tsx index dafdd4ad..561f4065 100644 --- a/src/pages/llmodels/components/model-item.tsx +++ b/src/pages/llmodels/components/model-item.tsx @@ -2,18 +2,19 @@ import IconFont from '@/components/icon-font'; import StatusTag from '@/components/status-tag'; import ThemeTag from '@/components/tags-wrapper/theme-tag'; import Card from '@/components/templates/card'; +import { useIntl, useNavigate } from '@umijs/max'; import { Button } from 'antd'; import dayjs from 'dayjs'; import _ from 'lodash'; import React from 'react'; import styled from 'styled-components'; import { - InstanceStatusMap, InstanceStatusMapValue, modelCategories, - modelSourceMap, - status + modelCategoriesMap, + modelSourceMap } from '../config'; +import { categoryToPathMap } from '../config/button-actions'; const ModelItemContent = styled.div` display: flex; @@ -87,7 +88,7 @@ const Header = styled.div` const sourceIconMap = { [modelSourceMap.local_path_value]: 'icon-hard-disk', [modelSourceMap.huggingface_value]: 'icon-huggingface', - [modelSourceMap.modelscope_value]: 'icon-modelscope' + [modelSourceMap.modelscope_value]: 'icon-tu2' }; const ModelItem: React.FC<{ @@ -95,6 +96,28 @@ const ModelItem: React.FC<{ onClick: (model: any) => void; }> = (props) => { const { model, onClick } = props; + const intl = useIntl(); + const navigate = useNavigate(); + + const handleOpenPlayGround = () => { + for (const [category, path] of Object.entries(categoryToPathMap)) { + if ( + model.categories?.includes(category) && + [ + modelCategoriesMap.text_to_speech, + modelCategoriesMap.speech_to_text + ].includes(category) + ) { + navigate(`${path}&model=${model.name}`); + return; + } + if (model.categories?.includes(category)) { + navigate(`${path}?model=${model.name}`); + return; + } + } + navigate(`/playground/chat?model=${model.name}`); + }; return ( @@ -141,8 +164,9 @@ const ModelItem: React.FC<{ className="btn" variant="filled" color="default" + onClick={handleOpenPlayGround} > - Go to Playground + {intl.formatMessage({ id: 'models.openinplayground' })} diff --git a/src/pages/users/components/add-modal.tsx b/src/pages/users/components/add-modal.tsx index 5ed4af22..b0a8fc01 100644 --- a/src/pages/users/components/add-modal.tsx +++ b/src/pages/users/components/add-modal.tsx @@ -1,3 +1,4 @@ +import IconFont from '@/components/icon-font'; import ModalFooter from '@/components/modal-footer'; import ScrollerModal from '@/components/scroller-modal'; import SealInput from '@/components/seal-form/seal-input'; @@ -5,7 +6,6 @@ import SealSelect from '@/components/seal-form/seal-select'; import SealSwitch from '@/components/seal-form/seal-switch'; import { PageAction, PasswordReg } from '@/config'; import { PageActionType } from '@/config/types'; -import { UserOutlined, UserSwitchOutlined } from '@ant-design/icons'; import { useIntl } from '@umijs/max'; import { Form, Select } from 'antd'; import { useEffect } from 'react'; @@ -106,9 +106,15 @@ const AddModal: React.FC = ({ return ( {item.value === UserRoles.ADMIN ? ( - + ) : ( - + )} {intl.formatMessage({ id: item.label })} diff --git a/src/pages/users/index.tsx b/src/pages/users/index.tsx index 9f354354..e013ce26 100644 --- a/src/pages/users/index.tsx +++ b/src/pages/users/index.tsx @@ -281,7 +281,7 @@ const Users: React.FC = () => { return record.is_admin ? (