From bae9d17a7e9f945c63968b604b7105b0da8ae009 Mon Sep 17 00:00:00 2001 From: jiangwel Date: Sun, 17 Aug 2025 18:57:01 +0800 Subject: [PATCH 1/2] =?UTF-8?q?refactor(ModelModal):=20=E7=AE=80=E5=8C=96?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=AE=9A=E4=B9=89=E5=B9=B6=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E6=9C=AA=E4=BD=BF=E7=94=A8=E7=9A=84=E6=9E=9A=E4=B8=BE=E5=92=8C?= =?UTF-8?q?=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 ConstsModelType 和 ConstsModelProvider 枚举,改用字符串类型 - 删除 getProvidersByType 函数和 ModelProvider 常量 - 更新 titleMap 使用字符串键值对 - 简化接口类型定义,移除冗余类型 --- ui/ModelModal/src/ModelModal.tsx | 20 ++-- ui/ModelModal/src/constants/providers.ts | 130 ++--------------------- ui/ModelModal/src/index.ts | 7 +- ui/ModelModal/src/types/types.ts | 109 ++++--------------- 4 files changed, 39 insertions(+), 227 deletions(-) diff --git a/ui/ModelModal/src/ModelModal.tsx b/ui/ModelModal/src/ModelModal.tsx index 8173b9a..55bf022 100644 --- a/ui/ModelModal/src/ModelModal.tsx +++ b/ui/ModelModal/src/ModelModal.tsx @@ -19,21 +19,21 @@ import { useForm, Controller } from 'react-hook-form'; import { AddModelForm, Model, - ConstsModelType, ModelModalProps, } from './types/types'; import { DEFAULT_MODEL_PROVIDERS } from './constants/providers'; -import { ModelProvider } from './constants/providers'; import { getLocaleMessage } from './constants/locale'; import './assets/fonts/iconfont'; import { lightTheme } from './theme'; -const titleMap = { - [ConstsModelType.ModelTypeLLM]: '对话模型', - [ConstsModelType.ModelTypeCoder]: '代码补全模型', - [ConstsModelType.ModelTypeEmbedding]: '向量模型', - [ConstsModelType.ModelTypeAudio]: '音频模型', - [ConstsModelType.ModelTypeReranker]: '重排序模型', +const titleMap: Record = { + ["llm"]: '对话模型', + ["chat"]: '对话模型', + ["coder"]: '代码补全模型', + ["code"]: '代码补全模型', + ["embedding"]: '向量模型', + ["rerank"]: '重排序模型', + ["reranker"]: '重排序模型', }; export const ModelModal: React.FC = ({ @@ -41,7 +41,7 @@ export const ModelModal: React.FC = ({ onClose, refresh, data, - type = ConstsModelType.ModelTypeLLM, + type = "llm", modelService, language = 'zh-CN', }: ModelModalProps) => { @@ -362,7 +362,7 @@ export const ModelModal: React.FC = ({ setModelLoading(false); setSuccess(false); reset({ - provider: it.label as keyof typeof ModelProvider, + provider: it.label as keyof typeof DEFAULT_MODEL_PROVIDERS, base_url: it.label === 'AzureOpenAI' ? '' : it.defaultBaseUrl, model: '', diff --git a/ui/ModelModal/src/constants/providers.ts b/ui/ModelModal/src/constants/providers.ts index cdc41b1..ea721d8 100644 --- a/ui/ModelModal/src/constants/providers.ts +++ b/ui/ModelModal/src/constants/providers.ts @@ -112,131 +112,15 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { modelDocumentUrl: 'https://portal.azure.com/#view/Microsoft_Azure_ProjectOxford/CognitiveServicesHub/~/OpenAI', defaultBaseUrl: 'https://.openai.azure.com', }, - Other: { - label: 'Other', - cn: '其他', - icon: 'icon-a-AIshezhi', - urlWrite: true, - secretRequired: true, - customHeader: false, - modelDocumentUrl: '', - defaultBaseUrl: '', - }, -}; - -// 根据模型类型过滤提供商 -export const getProvidersByType = (type: string, providers: ModelProviderMap = DEFAULT_MODEL_PROVIDERS): ModelProviderMap => { - if (type === 'embedding' || type === 'rerank') { - return { - BaiZhiCloud: providers.BaiZhiCloud, - Other: providers.Other, - }; - } - return providers; -}; - -export const ModelProvider = { - BaiZhiCloud: { - label: 'BaiZhiCloud', - cn: '百智云', - icon: 'icon-baizhiyunlogo', - urlWrite: false, - secretRequired: true, - customHeader: false, - modelDocumentUrl: 'https://model-square.app.baizhi.cloud/token', - defaultBaseUrl: 'https://model-square.app.baizhi.cloud/v1', - }, - DeepSeek: { - label: 'DeepSeek', - cn: '', - icon: 'icon-deepseek', - urlWrite: false, - secretRequired: true, - customHeader: false, - modelDocumentUrl: 'https://platform.deepseek.com/api_keys', - defaultBaseUrl: 'https://api.deepseek.com/v1', - }, - Hunyuan: { - label: 'Hunyuan', - cn: '腾讯混元', - icon: 'icon-tengxunhunyuan', - urlWrite: false, - secretRequired: true, - customHeader: false, - modelDocumentUrl: 'https://console.cloud.tencent.com/hunyuan/start', - defaultBaseUrl: 'https://api.hunyuan.cloud.tencent.com/v1', - }, - BaiLian: { - label: 'BaiLian', - cn: '阿里云百炼', - icon: 'icon-aliyunbailian', - urlWrite: false, - secretRequired: true, - customHeader: false, - modelDocumentUrl: 'https://bailian.console.aliyun.com/?tab=model#/api-key', - defaultBaseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1', - }, - Volcengine: { - label: 'Volcengine', - cn: '火山引擎', - icon: 'icon-huoshanyinqing', - urlWrite: false, - secretRequired: true, - customHeader: false, - modelDocumentUrl: - 'https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey', - defaultBaseUrl: 'https://ark.cn-beijing.volces.com/api/v3', - }, - OpenAI: { - label: 'OpenAI', - cn: '', - icon: 'icon-chatgpt', - urlWrite: false, - secretRequired: true, - customHeader: false, - modelDocumentUrl: 'https://platform.openai.com/api-keys', - defaultBaseUrl: 'https://api.openai.com/v1', - }, - Ollama: { - label: 'Ollama', - cn: '', - icon: 'icon-ollama', - urlWrite: true, - secretRequired: false, - customHeader: true, - modelDocumentUrl: '', - defaultBaseUrl: 'http://127.0.0.1:11434/v1', - }, - SiliconFlow: { - label: 'SiliconFlow', - cn: '硅基流动', - icon: 'icon-a-ziyuan2', - urlWrite: false, - secretRequired: true, - customHeader: false, - modelDocumentUrl: 'https://cloud.siliconflow.cn/account/ak', - defaultBaseUrl: 'https://api.siliconflow.cn/v1', - }, - Moonshot: { - label: 'Moonshot', - cn: '月之暗面', - icon: 'icon-Kim', + Gemini: { + label: 'Gemini', + cn: 'Gemini', + icon: 'icon-gemini', urlWrite: false, secretRequired: true, customHeader: false, - modelDocumentUrl: 'https://platform.moonshot.cn/console/api-keys', - defaultBaseUrl: 'https://api.moonshot.cn/v1', - }, - AzureOpenAI: { - label: 'AzureOpenAI', - cn: 'Azure OpenAI', - icon: 'icon-azure', - urlWrite: true, - secretRequired: true, - customHeader: false, - modelDocumentUrl: - 'https://portal.azure.com/#view/Microsoft_Azure_ProjectOxford/CognitiveServicesHub/~/OpenAI', - defaultBaseUrl: 'https://.openai.azure.com', + modelDocumentUrl: 'https://ai.google.dev/gemini-api/docs', + defaultBaseUrl: 'https://generativelanguage.googleapis.com', }, Other: { label: 'Other', @@ -248,4 +132,4 @@ export const ModelProvider = { modelDocumentUrl: '', defaultBaseUrl: '', }, -}; \ No newline at end of file +}; diff --git a/ui/ModelModal/src/index.ts b/ui/ModelModal/src/index.ts index 289fa85..180ad04 100644 --- a/ui/ModelModal/src/index.ts +++ b/ui/ModelModal/src/index.ts @@ -2,13 +2,10 @@ export { ModelModal } from './ModelModal'; // 类型定义 -export type { ModelType, Model, ModelParam, ConstsModelStatus, ConstsModelProvider, ModelProviderConfig, ModelProviderMap, CreateModelReq as CreateModelData, ListModelReq as GetModelNameData, CheckModelReq as CheckModelData, UpdateModelReq as UpdateModelData, ModelService, ModelListItem, AddModelForm, ModelModalProps } from './types/types'; - -// 导出 ConstsModelType 枚举值 -export { ConstsModelType } from './types/types'; +export type { Model, ModelParam, ModelProviderConfig, ModelProviderMap, CreateModelReq as CreateModelData, ListModelReq as GetModelNameData, CheckModelReq as CheckModelData, UpdateModelReq as UpdateModelData, ModelService, ModelListItem, AddModelForm, ModelModalProps } from './types/types'; // 常量 -export { DEFAULT_MODEL_PROVIDERS, getProvidersByType } from './constants/providers'; +export { DEFAULT_MODEL_PROVIDERS} from './constants/providers'; export { LOCALE_MESSAGES, getLocaleMessage, getTitleMap } from './constants/locale'; // 主题类型声明会通过TypeScript自动包含 diff --git a/ui/ModelModal/src/types/types.ts b/ui/ModelModal/src/types/types.ts index da0323c..126b48b 100644 --- a/ui/ModelModal/src/types/types.ts +++ b/ui/ModelModal/src/types/types.ts @@ -1,17 +1,3 @@ -import { ModelProvider } from "@/constants/providers"; - -// 基础类型定义 -export type ModelType = 'llm' | 'embedding' | 'reranker' | 'coder' | 'audio'; - -// 模型类型常量 -export enum ConstsModelType { - ModelTypeLLM = "llm", - ModelTypeCoder = "coder", - ModelTypeEmbedding = "embedding", - ModelTypeAudio = "audio", - ModelTypeReranker = "reranker", -} - // 域模型接口 export interface Model { /** 接口地址 如:https://api.qwen.com */ @@ -35,17 +21,17 @@ export interface Model { /** 模型名称 如: deepseek-v3 */ model_name?: string; /** 模型类型 llm:对话模型 coder:代码模型 */ - model_type?: ConstsModelType; + model_type?: string; /** 输出token数 */ output?: number; /** 高级参数 */ param?: ModelParam; /** 提供商 */ - provider?: ConstsModelProvider; + provider?: string; /** 模型显示名称 */ show_name?: string; /** 状态 active:启用 inactive:禁用 */ - status?: ConstsModelStatus; + status?: string; /** 更新时间 */ updated_at?: number; } @@ -59,24 +45,6 @@ export interface ModelParam { support_prompt_cache?: boolean; } -export enum ConstsModelStatus { - ModelStatusActive = "active", - ModelStatusInactive = "inactive", -} - -export enum ConstsModelProvider { - ModelProviderSiliconFlow = "SiliconFlow", - ModelProviderOpenAI = "OpenAI", - ModelProviderOllama = "Ollama", - ModelProviderDeepSeek = "DeepSeek", - ModelProviderMoonshot = "Moonshot", - ModelProviderAzureOpenAI = "AzureOpenAI", - ModelProviderBaiZhiCloud = "BaiZhiCloud", - ModelProviderHunyuan = "Hunyuan", - ModelProviderBaiLian = "BaiLian", - ModelProviderVolcengine = "Volcengine", -} - // 模型提供商配置 export interface ModelProviderConfig { label: string; @@ -103,26 +71,14 @@ export interface ModelParam { // 创建模型数据 export interface CreateModelReq { - api_base: string; + api_base?: string; api_header?: string; api_key?: string; api_version?: string; - model_name: string; - model_type?: ConstsModelType; + model_name?: string; + model_type?: string; param?: ModelParam; - provider: - | "SiliconFlow" - | "OpenAI" - | "Ollama" - | "DeepSeek" - | "Moonshot" - | "AzureOpenAI" - | "BaiZhiCloud" - | "Hunyuan" - | "BaiLian" - | "Volcengine" - | "Other"; - /** 模型显示名称 */ + provider?: string; show_name?: string; } @@ -130,34 +86,20 @@ export interface CreateModelReq { export interface ListModelReq { api_header?: string; api_key?: string; - base_url: string; - provider: - | "SiliconFlow" - | "OpenAI" - | "Ollama" - | "DeepSeek" - | "Moonshot" - | "AzureOpenAI" - | "BaiZhiCloud" - | "Hunyuan" - | "BaiLian" - | "Volcengine"; - type: ConstsModelType; + base_url?: string; + provider?: string; + type?: string; } // 检查模型数据 export interface CheckModelReq { - /** 接口地址 */ - api_base: string; + api_base?: string; api_header?: string; - /** 接口密钥 */ - api_key: string; + api_key?: string; api_version?: string; - /** 模型名称 */ - model_name: string; - /** 提供商 */ - provider: ConstsModelProvider; - type: "llm" | "coder" | "embedding" | "rerank"; + model_name?: string; + provider?: string; + type?: string; } // 更新模型数据 @@ -175,22 +117,11 @@ export interface UpdateModelReq { /** 高级参数 */ param?: ModelParam; /** 提供商 */ - provider: - | "SiliconFlow" - | "OpenAI" - | "Ollama" - | "DeepSeek" - | "Moonshot" - | "AzureOpenAI" - | "BaiZhiCloud" - | "Hunyuan" - | "BaiLian" - | "Volcengine" - | "Other"; + provider?: string; /** 模型显示名称 */ show_name?: string; /** 状态 active:启用 inactive:禁用 */ - status?: ConstsModelStatus; + status?: string; } // 模型服务接口 @@ -207,14 +138,14 @@ export interface ModelListItem { // 表单数据 export interface AddModelForm { - provider: keyof typeof ModelProvider; + provider: string; model: string; base_url: string; api_version: string; api_key: string; api_header_key: string; api_header_value: string; - type: ModelType; + type: string; show_name: string; // 高级设置字段 context_window_size: number; @@ -228,7 +159,7 @@ export interface AddModelForm { export interface ModelModalProps { open: boolean; data: Model | null; - type: ConstsModelType; + type: string; onClose: () => void; refresh: () => void; modelService: ModelService; From 16ff42b870325d7024398e460dfe6f58d91baf2b Mon Sep 17 00:00:00 2001 From: jiangwel Date: Mon, 18 Aug 2025 17:01:16 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4=E5=86=97=E4=BD=99?= =?UTF-8?q?=E7=9A=84=E6=A8=A1=E5=9E=8B=E6=8F=90=E4=BE=9B=E5=95=86=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 由于模型提供商错误已在其他地方处理,此处移除冗余检查以避免重复错误处理 --- usecase/modelkit.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/usecase/modelkit.go b/usecase/modelkit.go index 21c129f..6a4278d 100644 --- a/usecase/modelkit.go +++ b/usecase/modelkit.go @@ -158,11 +158,7 @@ func CheckModel(ctx context.Context, req *domain.CheckModelReq) (*domain.CheckMo checkResp.Error = err.Error() return checkResp, nil } - modelProvider, err := consts.ParseModelProvider(req.Provider) - if err != nil { - checkResp.Error = err.Error() - return checkResp, nil - } + modelProvider, _ := consts.ParseModelProvider(req.Provider) if modelType == consts.ModelTypeEmbedding || modelType == consts.ModelTypeRerank { url := req.BaseURL reqBody := map[string]any{}