From d8a7fb6f2b6d6dc5b77e5d60fcc57561532ffe99 Mon Sep 17 00:00:00 2001 From: chanx <1243304602@qq.com> Date: Fri, 31 Oct 2025 13:42:28 +0800 Subject: [PATCH] Fix: Fixed the styling and logic issues on the model provider page #10703 (#10909) ### What problem does this PR solve? Fix: Fixed the styling and logic issues on the model provider page ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue) --- web/src/hooks/llm-hooks.tsx | 40 +++- web/src/interfaces/database/llm.ts | 1 + web/src/locales/en.ts | 1 + web/src/locales/zh.ts | 1 + .../setting-model/api-key-modal/index.tsx | 129 ------------- .../setting-model/components/modal-card.tsx | 21 +-- .../setting-model/components/used-model.tsx | 4 +- .../pages/user-setting/setting-model/hooks.ts | 13 +- .../user-setting/setting-model/index.tsx | 22 +-- .../user-setting/setting-model/index1.tsx | 24 +-- .../modal/api-key-modal/index.tsx | 174 ++++++++++++++++++ .../{ => modal}/azure-openai-modal/index.tsx | 0 .../{ => modal}/bedrock-modal/index.tsx | 2 +- .../{ => modal}/fish-audio-modal/index.tsx | 0 .../{ => modal}/google-modal/index.tsx | 0 .../{ => modal}/hunyuan-modal/index.tsx | 0 .../{ => modal}/next-tencent-modal/index.tsx | 0 .../{ => modal}/ollama-modal/index.tsx | 0 .../{ => modal}/spark-modal/index.tsx | 0 .../system-model-setting-modal/index.tsx | 2 +- .../{ => modal}/volcengine-modal/index.tsx | 0 .../{ => modal}/yiyan-modal/index.tsx | 0 web/src/services/user-service.ts | 5 + web/src/utils/api.ts | 1 + 24 files changed, 265 insertions(+), 175 deletions(-) delete mode 100644 web/src/pages/user-setting/setting-model/api-key-modal/index.tsx create mode 100644 web/src/pages/user-setting/setting-model/modal/api-key-modal/index.tsx rename web/src/pages/user-setting/setting-model/{ => modal}/azure-openai-modal/index.tsx (100%) rename web/src/pages/user-setting/setting-model/{ => modal}/bedrock-modal/index.tsx (98%) rename web/src/pages/user-setting/setting-model/{ => modal}/fish-audio-modal/index.tsx (100%) rename web/src/pages/user-setting/setting-model/{ => modal}/google-modal/index.tsx (100%) rename web/src/pages/user-setting/setting-model/{ => modal}/hunyuan-modal/index.tsx (100%) rename web/src/pages/user-setting/setting-model/{ => modal}/next-tencent-modal/index.tsx (100%) rename web/src/pages/user-setting/setting-model/{ => modal}/ollama-modal/index.tsx (100%) rename web/src/pages/user-setting/setting-model/{ => modal}/spark-modal/index.tsx (100%) rename web/src/pages/user-setting/setting-model/{ => modal}/system-model-setting-modal/index.tsx (98%) rename web/src/pages/user-setting/setting-model/{ => modal}/volcengine-modal/index.tsx (100%) rename web/src/pages/user-setting/setting-model/{ => modal}/yiyan-modal/index.tsx (100%) diff --git a/web/src/hooks/llm-hooks.tsx b/web/src/hooks/llm-hooks.tsx index 974bcae94..7ea9228c9 100644 --- a/web/src/hooks/llm-hooks.tsx +++ b/web/src/hooks/llm-hooks.tsx @@ -1,4 +1,5 @@ import { LlmIcon } from '@/components/svg-icon'; +import message from '@/components/ui/message'; import { LlmModelType } from '@/constants/knowledge'; import { ResponseGetType } from '@/interfaces/database/base'; import { @@ -16,7 +17,6 @@ import userService from '@/services/user-service'; import { sortLLmFactoryListBySpecifiedOrder } from '@/utils/common-util'; import { getLLMIconName, getRealModelName } from '@/utils/llm-util'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { Flex, message } from 'antd'; import { DefaultOptionType } from 'antd/es/select'; import { useCallback, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; @@ -59,7 +59,7 @@ export const useSelectLlmOptions = () => { function buildLlmOptionsWithIcon(x: IThirdOAIModel) { return { label: ( - +
{getRealModelName(x.llm_name)} - +
), value: `${x.llm_name}@${x.fid}`, disabled: !x.available, @@ -81,7 +81,6 @@ export const useSelectLlmOptionsByModelType = () => { const groupImage2TextOptions = useCallback(() => { const modelType = LlmModelType.Image2text; const modelTag = modelType.toUpperCase(); - return Object.entries(llmInfo) .map(([key, value]) => { return { @@ -91,7 +90,8 @@ export const useSelectLlmOptionsByModelType = () => { (x) => (x.model_type.includes(modelType) || (x.tags && x.tags.includes(modelTag))) && - x.available, + x.available && + x.status === '1', ) .map(buildLlmOptionsWithIcon), }; @@ -141,7 +141,6 @@ export const useComposeLlmOptionsByModelTypes = ( modelTypes: LlmModelType[], ) => { const allOptions = useSelectLlmOptionsByModelType(); - return modelTypes.reduce< (DefaultOptionType & { options: { @@ -359,6 +358,35 @@ export const useDeleteLlm = () => { return { data, loading, deleteLlm: mutateAsync }; }; +export const useEnableLlm = () => { + const queryClient = useQueryClient(); + const { t } = useTranslation(); + const { + data, + isPending: loading, + mutateAsync, + } = useMutation({ + mutationKey: ['enableLlm'], + mutationFn: async (params: IDeleteLlmRequestBody & { enable: boolean }) => { + const reqParam: IDeleteLlmRequestBody & { + enable?: boolean; + status?: 1 | 0; + } = { ...params, status: params.enable ? 1 : 0 }; + delete reqParam.enable; + const { data } = await userService.enable_llm(reqParam); + if (data.code === 0) { + queryClient.invalidateQueries({ queryKey: ['myLlmList'] }); + queryClient.invalidateQueries({ queryKey: ['myLlmListDetailed'] }); + queryClient.invalidateQueries({ queryKey: ['factoryList'] }); + message.success(t('message.modified')); + } + return data.code; + }, + }); + + return { data, loading, enableLlm: mutateAsync }; +}; + export const useDeleteFactory = () => { const queryClient = useQueryClient(); const { t } = useTranslation(); diff --git a/web/src/interfaces/database/llm.ts b/web/src/interfaces/database/llm.ts index 2608e5ab1..e97cac609 100644 --- a/web/src/interfaces/database/llm.ts +++ b/web/src/interfaces/database/llm.ts @@ -37,5 +37,6 @@ export interface IMyLlmValue { export interface Llm { name: string; type: string; + status: '0' | '1'; used_token: number; } diff --git a/web/src/locales/en.ts b/web/src/locales/en.ts index 6759ebcc0..40bc01346 100644 --- a/web/src/locales/en.ts +++ b/web/src/locales/en.ts @@ -680,6 +680,7 @@ This auto-tagging feature enhances retrieval by adding another layer of domain-s tocEnhanceTip: ` During the parsing of the document, table of contents information was generated (see the 'Enable Table of Contents Extraction' option in the General method). This allows the large model to return table of contents items relevant to the user's query, thereby using these items to retrieve related chunks and apply weighting to these chunks during the sorting process. This approach is derived from mimicking the behavioral logic of how humans search for knowledge in books.`, }, setting: { + save: 'Save', search: 'Search', availableModels: 'Available models', profile: 'Profile', diff --git a/web/src/locales/zh.ts b/web/src/locales/zh.ts index fd5994835..434973870 100644 --- a/web/src/locales/zh.ts +++ b/web/src/locales/zh.ts @@ -671,6 +671,7 @@ General:实体和关系提取提示来自 GitHub - microsoft/graphrag:基于 tocEnhanceTip: `解析文档时生成了目录信息(见General方法的‘启用目录抽取’),让大模型返回和用户问题相关的目录项,从而利用目录项拿到相关chunk,对这些chunk在排序中进行加权。这种方法来源于模仿人类查询书本中知识的行为逻辑`, }, setting: { + save: '保存', search: '搜索', availableModels: '可选模型', profile: '概要', diff --git a/web/src/pages/user-setting/setting-model/api-key-modal/index.tsx b/web/src/pages/user-setting/setting-model/api-key-modal/index.tsx deleted file mode 100644 index 0212c40a4..000000000 --- a/web/src/pages/user-setting/setting-model/api-key-modal/index.tsx +++ /dev/null @@ -1,129 +0,0 @@ -import { IModalManagerChildrenProps } from '@/components/modal-manager'; -import { LLMFactory } from '@/constants/llm'; -import { useTranslate } from '@/hooks/common-hooks'; -import { Form, Input, Modal } from 'antd'; -import { KeyboardEventHandler, useCallback, useEffect } from 'react'; -import { ApiKeyPostBody } from '../../interface'; - -interface IProps extends Omit { - loading: boolean; - initialValue: string; - llmFactory: string; - editMode?: boolean; - onOk: (postBody: ApiKeyPostBody) => void; - showModal?(): void; -} - -type FieldType = { - api_key?: string; - base_url?: string; - group_id?: string; -}; - -const modelsWithBaseUrl = [ - LLMFactory.OpenAI, - LLMFactory.AzureOpenAI, - LLMFactory.TongYiQianWen, -]; - -const ApiKeyModal = ({ - visible, - hideModal, - llmFactory, - loading, - initialValue, - editMode = false, - onOk, -}: IProps) => { - const [form] = Form.useForm(); - const { t } = useTranslate('setting'); - - const handleOk = useCallback(async () => { - const ret = await form.validateFields(); - - return onOk(ret); - }, [form, onOk]); - - const handleKeyDown: KeyboardEventHandler = useCallback( - async (e) => { - if (e.key === 'Enter') { - await handleOk(); - } - }, - [handleOk], - ); - - useEffect(() => { - if (visible) { - form.setFieldValue('api_key', initialValue); - } - }, [initialValue, form, visible]); - - return ( - -
- - label={t('apiKey')} - name="api_key" - tooltip={t('apiKeyTip')} - rules={[{ required: true, message: t('apiKeyMessage') }]} - > - - - {modelsWithBaseUrl.some((x) => x === llmFactory) && ( - - label={t('baseUrl')} - name="base_url" - tooltip={ - llmFactory === LLMFactory.TongYiQianWen - ? t('tongyiBaseUrlTip') - : t('baseUrlTip') - } - > - - - )} - {llmFactory?.toLowerCase() === 'Anthropic'.toLowerCase() && ( - - label={t('baseUrl')} - name="base_url" - tooltip={t('baseUrlTip')} - > - - - )} - {llmFactory?.toLowerCase() === 'Minimax'.toLowerCase() && ( - label={'Group ID'} name="group_id"> - - - )} - -
- ); -}; - -export default ApiKeyModal; diff --git a/web/src/pages/user-setting/setting-model/components/modal-card.tsx b/web/src/pages/user-setting/setting-model/components/modal-card.tsx index bdb0599a5..90950e64e 100644 --- a/web/src/pages/user-setting/setting-model/components/modal-card.tsx +++ b/web/src/pages/user-setting/setting-model/components/modal-card.tsx @@ -1,6 +1,7 @@ // src/components/ModelProviderCard.tsx import { LlmIcon } from '@/components/svg-icon'; import { Button } from '@/components/ui/button'; +import { Switch } from '@/components/ui/switch'; import { useSetModalState, useTranslate } from '@/hooks/common-hooks'; import { LlmItem } from '@/hooks/llm-hooks'; import { getRealModelName } from '@/utils/llm-util'; @@ -8,7 +9,7 @@ import { EditOutlined, SettingOutlined } from '@ant-design/icons'; import { ChevronsDown, ChevronsUp, Trash2 } from 'lucide-react'; import { FC } from 'react'; import { isLocalLlmFactory } from '../../utils'; -import { useHandleDeleteFactory, useHandleDeleteLlm } from '../hooks'; +import { useHandleDeleteFactory, useHandleEnableLlm } from '../hooks'; interface IModelCardProps { item: LlmItem; @@ -52,7 +53,7 @@ export const ModelProviderCard: FC = ({ }) => { const { visible, switchVisible } = useSetModalState(); const { t } = useTranslate('setting'); - const { handleDeleteLlm } = useHandleDeleteLlm(item.name); + const { handleEnableLlm } = useHandleEnableLlm(item.name); const { handleDeleteFactory } = useHandleDeleteFactory(item.name); const handleApiKeyClick = () => { @@ -66,7 +67,7 @@ export const ModelProviderCard: FC = ({ return (
{/* Header */} -
+
@@ -151,16 +152,12 @@ export const ModelProviderCard: FC = ({ )} - + />
))} diff --git a/web/src/pages/user-setting/setting-model/components/used-model.tsx b/web/src/pages/user-setting/setting-model/components/used-model.tsx index d6a704e29..4eb19a6bc 100644 --- a/web/src/pages/user-setting/setting-model/components/used-model.tsx +++ b/web/src/pages/user-setting/setting-model/components/used-model.tsx @@ -10,8 +10,8 @@ export const UsedModel = ({ }) => { const { factoryList, myLlmList: llmList, loading } = useSelectLlmList(); return ( -
-
Added models
+
+
Added models
{llmList.map((llm) => { return ( { const { deleteLlm } = useDeleteLlm(); const showDeleteConfirm = useShowDeleteConfirm(); - const handleDeleteLlm = (name: string) => () => { + const handleDeleteLlm = (name: string) => { showDeleteConfirm({ onOk: async () => { deleteLlm({ llm_factory: llmFactory, llm_name: name }); @@ -432,6 +433,16 @@ export const useHandleDeleteLlm = (llmFactory: string) => { return { handleDeleteLlm }; }; +export const useHandleEnableLlm = (llmFactory: string) => { + const { enableLlm } = useEnableLlm(); + + const handleEnableLlm = (name: string, enable: boolean) => { + enableLlm({ llm_factory: llmFactory, llm_name: name, enable }); + }; + + return { handleEnableLlm }; +}; + export const useHandleDeleteFactory = (llmFactory: string) => { const { deleteFactory } = useDeleteFactory(); const showDeleteConfirm = useShowDeleteConfirm(); diff --git a/web/src/pages/user-setting/setting-model/index.tsx b/web/src/pages/user-setting/setting-model/index.tsx index dc0008c35..9f0671252 100644 --- a/web/src/pages/user-setting/setting-model/index.tsx +++ b/web/src/pages/user-setting/setting-model/index.tsx @@ -2,14 +2,9 @@ import { LLMFactory } from '@/constants/llm'; import { LlmItem, useFetchMyLlmListDetailed } from '@/hooks/llm-hooks'; import { useCallback, useMemo } from 'react'; import { isLocalLlmFactory } from '../utils'; -import ApiKeyModal from './api-key-modal'; -import AzureOpenAIModal from './azure-openai-modal'; -import BedrockModal from './bedrock-modal'; import SystemSetting from './components/system-setting'; import { AvailableModels } from './components/un-add-model'; import { UsedModel } from './components/used-model'; -import FishAudioModal from './fish-audio-modal'; -import GoogleModal from './google-modal'; import { useSubmitApiKey, useSubmitAzure, @@ -24,12 +19,17 @@ import { useSubmitVolcEngine, useSubmityiyan, } from './hooks'; -import HunyuanModal from './hunyuan-modal'; -import TencentCloudModal from './next-tencent-modal'; -import OllamaModal from './ollama-modal'; -import SparkModal from './spark-modal'; -import VolcEngineModal from './volcengine-modal'; -import YiyanModal from './yiyan-modal'; +import ApiKeyModal from './modal/api-key-modal'; +import AzureOpenAIModal from './modal/azure-openai-modal'; +import BedrockModal from './modal/bedrock-modal'; +import FishAudioModal from './modal/fish-audio-modal'; +import GoogleModal from './modal/google-modal'; +import HunyuanModal from './modal/hunyuan-modal'; +import TencentCloudModal from './modal/next-tencent-modal'; +import OllamaModal from './modal/ollama-modal'; +import SparkModal from './modal/spark-modal'; +import VolcEngineModal from './modal/volcengine-modal'; +import YiyanModal from './modal/yiyan-modal'; const ModelProviders = () => { const { saveSystemModelSettingLoading, onSystemSettingSavingOk } = useSubmitSystemModelSetting(); diff --git a/web/src/pages/user-setting/setting-model/index1.tsx b/web/src/pages/user-setting/setting-model/index1.tsx index 73f7ff0bf..4a2fea817 100644 --- a/web/src/pages/user-setting/setting-model/index1.tsx +++ b/web/src/pages/user-setting/setting-model/index1.tsx @@ -34,11 +34,6 @@ import { CircleHelp } from 'lucide-react'; import { useCallback, useMemo } from 'react'; import SettingTitle from '../components/setting-title'; import { isLocalLlmFactory } from '../utils'; -import ApiKeyModal from './api-key-modal'; -import AzureOpenAIModal from './azure-openai-modal'; -import BedrockModal from './bedrock-modal'; -import FishAudioModal from './fish-audio-modal'; -import GoogleModal from './google-modal'; import { useHandleDeleteFactory, useHandleDeleteLlm, @@ -55,14 +50,19 @@ import { useSubmitVolcEngine, useSubmityiyan, } from './hooks'; -import HunyuanModal from './hunyuan-modal'; import styles from './index.less'; -import TencentCloudModal from './next-tencent-modal'; -import OllamaModal from './ollama-modal'; -import SparkModal from './spark-modal'; -import SystemModelSettingModal from './system-model-setting-modal'; -import VolcEngineModal from './volcengine-modal'; -import YiyanModal from './yiyan-modal'; +import ApiKeyModal from './modal/api-key-modal'; +import AzureOpenAIModal from './modal/azure-openai-modal'; +import BedrockModal from './modal/bedrock-modal'; +import FishAudioModal from './modal/fish-audio-modal'; +import GoogleModal from './modal/google-modal'; +import HunyuanModal from './modal/hunyuan-modal'; +import TencentCloudModal from './modal/next-tencent-modal'; +import OllamaModal from './modal/ollama-modal'; +import SparkModal from './modal/spark-modal'; +import SystemModelSettingModal from './modal/system-model-setting-modal'; +import VolcEngineModal from './modal/volcengine-modal'; +import YiyanModal from './modal/yiyan-modal'; const { Text } = Typography; interface IModelCardProps { diff --git a/web/src/pages/user-setting/setting-model/modal/api-key-modal/index.tsx b/web/src/pages/user-setting/setting-model/modal/api-key-modal/index.tsx new file mode 100644 index 000000000..7c8382024 --- /dev/null +++ b/web/src/pages/user-setting/setting-model/modal/api-key-modal/index.tsx @@ -0,0 +1,174 @@ +import { IModalManagerChildrenProps } from '@/components/modal-manager'; +import { + Form, + FormControl, + FormField, + FormItem, + FormLabel, + FormMessage, +} from '@/components/ui/form'; +import { Input } from '@/components/ui/input'; +import { Modal } from '@/components/ui/modal/modal'; +import { LLMFactory } from '@/constants/llm'; +import { useTranslate } from '@/hooks/common-hooks'; +import { KeyboardEventHandler, useCallback, useEffect } from 'react'; +import { useForm } from 'react-hook-form'; +import { ApiKeyPostBody } from '../../../interface'; + +interface IProps extends Omit { + loading: boolean; + initialValue: string; + llmFactory: string; + editMode?: boolean; + onOk: (postBody: ApiKeyPostBody) => void; + showModal?(): void; +} + +type FieldType = { + api_key?: string; + base_url?: string; + group_id?: string; +}; + +const modelsWithBaseUrl = [ + LLMFactory.OpenAI, + LLMFactory.AzureOpenAI, + LLMFactory.TongYiQianWen, +]; + +const ApiKeyModal = ({ + visible, + hideModal, + llmFactory, + loading, + initialValue, + editMode = false, + onOk, +}: IProps) => { + const form = useForm(); + const { t } = useTranslate('setting'); + + const handleOk = useCallback(async () => { + await form.handleSubmit((values) => onOk(values))(); + }, [form, onOk]); + + const handleKeyDown: KeyboardEventHandler = useCallback( + async (e) => { + if (e.key === 'Enter') { + await handleOk(); + } + }, + [handleOk], + ); + + useEffect(() => { + if (visible) { + form.setValue('api_key', initialValue); + } + }, [initialValue, form, visible]); + + return ( + !open && hideModal()} + onOk={handleOk} + onCancel={hideModal} + confirmLoading={loading} + okText={t('save')} + cancelText={t('cancel')} + > +
+
+ ( + + + {t('apiKey')} + * + + + + + + + )} + /> + + {modelsWithBaseUrl.some((x) => x === llmFactory) && ( + ( + + + {t('baseUrl')} + + + + + + + )} + /> + )} + + {llmFactory?.toLowerCase() === 'Anthropic'.toLowerCase() && ( + ( + + + {t('baseUrl')} + + + + + + + )} + /> + )} + + {llmFactory?.toLowerCase() === 'Minimax'.toLowerCase() && ( + ( + + + Group ID + + + + + + + )} + /> + )} +
+
+
+ ); +}; + +export default ApiKeyModal; diff --git a/web/src/pages/user-setting/setting-model/azure-openai-modal/index.tsx b/web/src/pages/user-setting/setting-model/modal/azure-openai-modal/index.tsx similarity index 100% rename from web/src/pages/user-setting/setting-model/azure-openai-modal/index.tsx rename to web/src/pages/user-setting/setting-model/modal/azure-openai-modal/index.tsx diff --git a/web/src/pages/user-setting/setting-model/bedrock-modal/index.tsx b/web/src/pages/user-setting/setting-model/modal/bedrock-modal/index.tsx similarity index 98% rename from web/src/pages/user-setting/setting-model/bedrock-modal/index.tsx rename to web/src/pages/user-setting/setting-model/modal/bedrock-modal/index.tsx index d3351ef06..fb903f514 100644 --- a/web/src/pages/user-setting/setting-model/bedrock-modal/index.tsx +++ b/web/src/pages/user-setting/setting-model/modal/bedrock-modal/index.tsx @@ -3,7 +3,7 @@ import { IModalProps } from '@/interfaces/common'; import { IAddLlmRequestBody } from '@/interfaces/request/llm'; import { Flex, Form, Input, InputNumber, Modal, Select, Space } from 'antd'; import { useMemo } from 'react'; -import { BedrockRegionList } from '../constant'; +import { BedrockRegionList } from '../../constant'; type FieldType = IAddLlmRequestBody & { bedrock_ak: string; diff --git a/web/src/pages/user-setting/setting-model/fish-audio-modal/index.tsx b/web/src/pages/user-setting/setting-model/modal/fish-audio-modal/index.tsx similarity index 100% rename from web/src/pages/user-setting/setting-model/fish-audio-modal/index.tsx rename to web/src/pages/user-setting/setting-model/modal/fish-audio-modal/index.tsx diff --git a/web/src/pages/user-setting/setting-model/google-modal/index.tsx b/web/src/pages/user-setting/setting-model/modal/google-modal/index.tsx similarity index 100% rename from web/src/pages/user-setting/setting-model/google-modal/index.tsx rename to web/src/pages/user-setting/setting-model/modal/google-modal/index.tsx diff --git a/web/src/pages/user-setting/setting-model/hunyuan-modal/index.tsx b/web/src/pages/user-setting/setting-model/modal/hunyuan-modal/index.tsx similarity index 100% rename from web/src/pages/user-setting/setting-model/hunyuan-modal/index.tsx rename to web/src/pages/user-setting/setting-model/modal/hunyuan-modal/index.tsx diff --git a/web/src/pages/user-setting/setting-model/next-tencent-modal/index.tsx b/web/src/pages/user-setting/setting-model/modal/next-tencent-modal/index.tsx similarity index 100% rename from web/src/pages/user-setting/setting-model/next-tencent-modal/index.tsx rename to web/src/pages/user-setting/setting-model/modal/next-tencent-modal/index.tsx diff --git a/web/src/pages/user-setting/setting-model/ollama-modal/index.tsx b/web/src/pages/user-setting/setting-model/modal/ollama-modal/index.tsx similarity index 100% rename from web/src/pages/user-setting/setting-model/ollama-modal/index.tsx rename to web/src/pages/user-setting/setting-model/modal/ollama-modal/index.tsx diff --git a/web/src/pages/user-setting/setting-model/spark-modal/index.tsx b/web/src/pages/user-setting/setting-model/modal/spark-modal/index.tsx similarity index 100% rename from web/src/pages/user-setting/setting-model/spark-modal/index.tsx rename to web/src/pages/user-setting/setting-model/modal/spark-modal/index.tsx diff --git a/web/src/pages/user-setting/setting-model/system-model-setting-modal/index.tsx b/web/src/pages/user-setting/setting-model/modal/system-model-setting-modal/index.tsx similarity index 98% rename from web/src/pages/user-setting/setting-model/system-model-setting-modal/index.tsx rename to web/src/pages/user-setting/setting-model/modal/system-model-setting-modal/index.tsx index c3b7ffc06..4d82f5179 100644 --- a/web/src/pages/user-setting/setting-model/system-model-setting-modal/index.tsx +++ b/web/src/pages/user-setting/setting-model/modal/system-model-setting-modal/index.tsx @@ -7,7 +7,7 @@ import { } from '@/hooks/llm-hooks'; import { Form, Modal, Select } from 'antd'; import { useEffect } from 'react'; -import { useFetchSystemModelSettingOnMount } from '../hooks'; +import { useFetchSystemModelSettingOnMount } from '../../hooks'; interface IProps extends Omit { loading: boolean; diff --git a/web/src/pages/user-setting/setting-model/volcengine-modal/index.tsx b/web/src/pages/user-setting/setting-model/modal/volcengine-modal/index.tsx similarity index 100% rename from web/src/pages/user-setting/setting-model/volcengine-modal/index.tsx rename to web/src/pages/user-setting/setting-model/modal/volcengine-modal/index.tsx diff --git a/web/src/pages/user-setting/setting-model/yiyan-modal/index.tsx b/web/src/pages/user-setting/setting-model/modal/yiyan-modal/index.tsx similarity index 100% rename from web/src/pages/user-setting/setting-model/yiyan-modal/index.tsx rename to web/src/pages/user-setting/setting-model/modal/yiyan-modal/index.tsx diff --git a/web/src/services/user-service.ts b/web/src/services/user-service.ts index 1177f34af..c036303d8 100644 --- a/web/src/services/user-service.ts +++ b/web/src/services/user-service.ts @@ -16,6 +16,7 @@ const { set_tenant_info, add_llm, delete_llm, + enable_llm, deleteFactory, getSystemStatus, getSystemVersion, @@ -79,6 +80,10 @@ const methods = { url: delete_llm, method: 'post', }, + enable_llm: { + url: enable_llm, + method: 'post', + }, getSystemStatus: { url: getSystemStatus, method: 'get', diff --git a/web/src/utils/api.ts b/web/src/utils/api.ts index 6af46198e..77dee617d 100644 --- a/web/src/utils/api.ts +++ b/web/src/utils/api.ts @@ -31,6 +31,7 @@ export default { set_api_key: `${api_host}/llm/set_api_key`, add_llm: `${api_host}/llm/add_llm`, delete_llm: `${api_host}/llm/delete_llm`, + enable_llm: `${api_host}/llm/enable_llm`, deleteFactory: `${api_host}/llm/delete_factory`, // plugin