diff --git a/backend/config/config.json.tmpl b/backend/config/config.json.tmpl index 74e6af0..f15d7e1 100644 --- a/backend/config/config.json.tmpl +++ b/backend/config/config.json.tmpl @@ -10,7 +10,7 @@ "openAiModelId": "{{ .chatModel }}", "openAiCustomModelInfo": { "maxTokens": 8192, - "contextWindow": 32768, + "contextWindow": 65536, "supportsImages": false, "supportsComputerUse": false, "supportsPromptCache": false diff --git a/backend/domain/model.go b/backend/domain/model.go index 36d2896..64ff069 100644 --- a/backend/domain/model.go +++ b/backend/domain/model.go @@ -84,7 +84,7 @@ type CheckModelReq struct { } type GetProviderModelListReq struct { - Provider consts.ModelProvider `json:"provider" query:"provider" validate:"required,oneof=SiliconFlow OpenAI Ollama DeepSeek Moonshot AzureOpenAI BaiZhiCloud Hunyuan BaiLian Volcengine"` + Provider consts.ModelProvider `json:"provider" query:"provider" validate:"required,oneof=SiliconFlow OpenAI Ollama DeepSeek Moonshot AzureOpenAI BaiZhiCloud Hunyuan BaiLian Volcengine Other"` BaseURL string `json:"base_url" query:"base_url" validate:"required"` APIKey string `json:"api_key" query:"api_key"` APIHeader string `json:"api_header" query:"api_header"` @@ -114,23 +114,23 @@ type GetTokenUsageReq struct { type CreateModelReq struct { UserID string `json:"-"` - ShowName string `json:"show_name"` // 模型显示名称 - ModelName string `json:"model_name" validate:"required"` // 模型名称 如: deepseek-v3 - Provider consts.ModelProvider `json:"provider" validate:"required,oneof=SiliconFlow OpenAI Ollama DeepSeek Moonshot AzureOpenAI BaiZhiCloud Hunyuan BaiLian Volcengine"` // 提供商 - APIBase string `json:"api_base" validate:"required"` // 接口地址 如:https://api.qwen.com - APIKey string `json:"api_key"` // 接口密钥 如:sk-xxxx + ShowName string `json:"show_name"` // 模型显示名称 + ModelName string `json:"model_name" validate:"required"` // 模型名称 如: deepseek-v3 + Provider consts.ModelProvider `json:"provider" validate:"required,oneof=SiliconFlow OpenAI Ollama DeepSeek Moonshot AzureOpenAI BaiZhiCloud Hunyuan BaiLian Volcengine Other"` // 提供商 + APIBase string `json:"api_base" validate:"required"` // 接口地址 如:https://api.qwen.com + APIKey string `json:"api_key"` // 接口密钥 如:sk-xxxx APIVersion string `json:"api_version"` APIHeader string `json:"api_header"` ModelType consts.ModelType `json:"model_type"` // 模型类型 llm:对话模型 coder:代码模型 } type UpdateModelReq struct { - ID string `json:"id"` // 模型ID - ModelName *string `json:"model_name"` // 模型名称 - ShowName string `json:"show_name"` // 模型显示名称 - Provider *consts.ModelProvider `json:"provider" validate:"required,oneof=SiliconFlow OpenAI Ollama DeepSeek Moonshot AzureOpenAI BaiZhiCloud Hunyuan BaiLian Volcengine"` // 提供商 - APIBase *string `json:"api_base"` // 接口地址 如:https://api.qwen.com - APIKey *string `json:"api_key"` // 接口密钥 如:sk-xxxx + ID string `json:"id"` // 模型ID + ModelName *string `json:"model_name"` // 模型名称 + ShowName *string `json:"show_name"` // 模型显示名称 + Provider *consts.ModelProvider `json:"provider" validate:"required,oneof=SiliconFlow OpenAI Ollama DeepSeek Moonshot AzureOpenAI BaiZhiCloud Hunyuan BaiLian Volcengine Other"` // 提供商 + APIBase *string `json:"api_base"` // 接口地址 如:https://api.qwen.com + APIKey *string `json:"api_key"` // 接口密钥 如:sk-xxxx APIVersion *string `json:"api_version"` APIHeader *string `json:"api_header"` Status *consts.ModelStatus `json:"status"` // 状态 active:启用 inactive:禁用 @@ -149,9 +149,9 @@ type ModelTokenUsage struct { } type ModelBasic struct { - Name string `json:"name"` // 模型名称 - Provider consts.ModelProvider `json:"provider" validate:"required,oneof=SiliconFlow OpenAI Ollama DeepSeek Moonshot AzureOpenAI BaiZhiCloud Hunyuan BaiLian Volcengine"` // 提供商 - APIBase string `json:"api_base"` // 接口地址 如:https://api.qwen.com + Name string `json:"name"` // 模型名称 + Provider consts.ModelProvider `json:"provider" validate:"required,oneof=SiliconFlow OpenAI Ollama DeepSeek Moonshot AzureOpenAI BaiZhiCloud Hunyuan BaiLian Volcengine Other"` // 提供商 + APIBase string `json:"api_base"` // 接口地址 如:https://api.qwen.com } type ModelUsage struct { diff --git a/backend/internal/model/usecase/model.go b/backend/internal/model/usecase/model.go index 50f5a7d..07da554 100644 --- a/backend/internal/model/usecase/model.go +++ b/backend/internal/model/usecase/model.go @@ -225,6 +225,9 @@ func (m *ModelUsecase) Update(ctx context.Context, req *domain.UpdateModelReq) ( if req.APIHeader != nil { up.SetAPIHeader(*req.APIHeader) } + if req.ShowName != nil { + up.SetShowName(*req.ShowName) + } if req.Status != nil { if *req.Status == consts.ModelStatusActive { if err := tx.Model.Update(). diff --git a/ui/src/pages/model/components/modelCard.tsx b/ui/src/pages/model/components/modelCard.tsx index e81635f..0887bca 100644 --- a/ui/src/pages/model/components/modelCard.tsx +++ b/ui/src/pages/model/components/modelCard.tsx @@ -116,7 +116,14 @@ const ModelItem = ({ } sx={{ fontSize: 24 }} /> - {data.model_name} + + {data.show_name && ( + + {data.show_name} / + + )} + {data.model_name} + {data.is_active && 正在使用} diff --git a/ui/src/pages/model/components/modelModal.tsx b/ui/src/pages/model/components/modelModal.tsx index 3437758..16077d3 100644 --- a/ui/src/pages/model/components/modelModal.tsx +++ b/ui/src/pages/model/components/modelModal.tsx @@ -36,6 +36,7 @@ interface AddModelForm { api_header_key: string; api_header_value: string; type: ConstsModelType; + show_name: string; } const titleMap = { @@ -74,6 +75,7 @@ const ModelAdd = ({ api_key: '', api_header_key: '', api_header_value: '', + show_name: '', }, }); @@ -168,6 +170,7 @@ const ModelAdd = ({ api_version: value.api_version, id: data.id, provider: value.provider as Exclude, + show_name: value.show_name, }) .then(() => { message.success('修改成功'); @@ -184,6 +187,7 @@ const ModelAdd = ({ model_name: value.model, api_header: header, provider: value.provider as Exclude, + show_name: value.show_name, }) .then(() => { message.success('添加成功'); @@ -211,6 +215,7 @@ const ModelAdd = ({ api_header_key: value.api_header?.split('=')[0] || '', api_header_value: value.api_header?.split('=')[1] || '', type, + show_name: value.show_name || '', }); } reset({ @@ -222,6 +227,7 @@ const ModelAdd = ({ api_version: value.api_version || '', api_header_key: value.api_header?.split('=')[0] || '', api_header_value: value.api_header?.split('=')[1] || '', + show_name: value.show_name || '', }); }; @@ -240,6 +246,7 @@ const ModelAdd = ({ api_version: '', api_header_key: '', api_header_value: '', + show_name: '', }); } } @@ -314,6 +321,7 @@ const ModelAdd = ({ api_key: '', api_header_key: '', api_header_value: '', + show_name: '', }); } }} @@ -418,6 +426,36 @@ const ModelAdd = ({ /> )} /> + {(modelUserList.length !== 0 || providerBrand === 'Other') && ( + <> + + 模型备注 + + * + + + ( + + )} + /> + > + )} {providerBrand === 'AzureOpenAI' && ( <> pFad - Phonifier reborn Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved. Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages. Alternative Proxies:Alternative ProxypFad ProxypFad v3 ProxypFad v4 Proxy
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy