From ea8731e06cbe34ea3379223744dcad385b2bbc6a Mon Sep 17 00:00:00 2001 From: jiangwel Date: Mon, 25 Aug 2025 17:22:27 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=A8=A1=E5=9E=8B=E6=A8=A1=E6=80=81?= =?UTF-8?q?=E6=A1=86):=20=E6=B7=BB=E5=8A=A0=E5=85=B3=E9=97=AD=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E5=A4=87=E6=B3=A8=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加is_close_model_remark属性控制是否显示模型备注 简化错误消息处理,移除冗余的错误包装 优化模型名称提示文本和高级设置显示逻辑 --- test/ui_example/src/App.tsx | 1 + ui/ModelModal/src/ModelModal.tsx | 11 +++++----- ui/ModelModal/src/constants/locale.ts | 2 +- ui/ModelModal/src/constants/providers.ts | 2 +- ui/ModelModal/src/types/types.ts | 1 + usecase/modelkit.go | 26 ++++++++++++------------ 6 files changed, 23 insertions(+), 20 deletions(-) diff --git a/test/ui_example/src/App.tsx b/test/ui_example/src/App.tsx index 733b211..9abf126 100644 --- a/test/ui_example/src/App.tsx +++ b/test/ui_example/src/App.tsx @@ -173,6 +173,7 @@ function App() { modelService={localModelService} language="zh-CN" messageComponent={messageComponent} + is_close_model_remark={true} /> diff --git a/ui/ModelModal/src/ModelModal.tsx b/ui/ModelModal/src/ModelModal.tsx index d588d39..58fde60 100644 --- a/ui/ModelModal/src/ModelModal.tsx +++ b/ui/ModelModal/src/ModelModal.tsx @@ -45,6 +45,7 @@ export const ModelModal: React.FC = ({ modelService, language = 'zh-CN', messageComponent, + is_close_model_remark = false, }: ModelModalProps) => { const theme = useTheme(); @@ -578,7 +579,7 @@ export const ModelModal: React.FC = ({ /> )} /> - {(modelUserList.length !== 0 || providerBrand === 'Other') && ( + {(modelUserList.length !== 0 || providerBrand === 'Other') && !is_close_model_remark && ( <> 模型备注 @@ -591,7 +592,7 @@ export const ModelModal: React.FC = ({ name='show_name' rules={{ required: { - value: true, + value: !is_close_model_remark, message: '模型备注不能为空', }, }} @@ -661,7 +662,7 @@ export const ModelModal: React.FC = ({ )} /> - 需要与模型供应商提供的名称完全一致,不要随便填写 + 需要与模型供应商提供的名称完全一致 ) : modelUserList.length === 0 ? ( @@ -751,8 +752,8 @@ export const ModelModal: React.FC = ({ )} - {/* 高级设置部分 - 在选择了模型或者是其它供应商时显示 */} - {(modelUserList.length !== 0 || providerBrand === 'Other') && ( + {/* 高级设置部分 - 在选择了模型或者是其它供应商时显示,但不包括embedding、rerank、reranker类型 */} + {(modelUserList.length !== 0 || providerBrand === 'Other') && !['embedding', 'rerank', 'reranker'].includes(model_type) && ( > 'urlRequired': 'URL 不能为空', 'secretRequired': 'API Secret 不能为空', 'modelNameRequired': '模型名称不能为空', - 'modelNameHint': '需要与模型供应商提供的名称完全一致,不要随便填写', + 'modelNameHint': '需要与模型供应商提供的名称完全一致', // 成功/错误消息 'addSuccess': '添加成功', diff --git a/ui/ModelModal/src/constants/providers.ts b/ui/ModelModal/src/constants/providers.ts index 35cddca..5f1e9af 100644 --- a/ui/ModelModal/src/constants/providers.ts +++ b/ui/ModelModal/src/constants/providers.ts @@ -418,7 +418,7 @@ export const DEFAULT_MODEL_PROVIDERS: ModelProviderMap = { urlWrite: false, secretRequired: true, customHeader: false, - chat: true, + chat: false, code: true, embedding: false, rerank: false, diff --git a/ui/ModelModal/src/types/types.ts b/ui/ModelModal/src/types/types.ts index 80076e4..1a0e746 100644 --- a/ui/ModelModal/src/types/types.ts +++ b/ui/ModelModal/src/types/types.ts @@ -179,4 +179,5 @@ export interface ModelModalProps { modelService: ModelService; language?: 'zh-CN' | 'en-US'; messageComponent?: MessageComponent; + is_close_model_remark?: boolean; } diff --git a/usecase/modelkit.go b/usecase/modelkit.go index 2898ef7..022cfc7 100644 --- a/usecase/modelkit.go +++ b/usecase/modelkit.go @@ -36,14 +36,14 @@ import ( func reqModelListApi[T domain.ModelResponseParser](req *domain.ModelListReq, httpClient *http.Client, responseType T) ([]domain.ModelListItem, error) { u, err := url.Parse(req.BaseURL) if err != nil { - return nil, fmt.Errorf("解析BaseURL失败: %w", err) + return nil, err } u.Path = path.Join(u.Path, "/models") client := request.NewClient(u.Scheme, u.Host, httpClient.Timeout, request.WithClient(httpClient)) query, err := utils.GetQuery(req) if err != nil { - return nil, fmt.Errorf("获取查询参数失败: %w", err) + return nil, err } resp, err := request.Get[T]( client, u.Path, @@ -55,7 +55,7 @@ func reqModelListApi[T domain.ModelResponseParser](req *domain.ModelListReq, htt request.WithQuery(query), ) if err != nil { - return nil, fmt.Errorf("请求模型列表API失败: %w", err) + return nil, err } return (*resp).ParseModels(), nil @@ -87,7 +87,7 @@ func ModelList(ctx context.Context, req *domain.ModelListReq) (*domain.ModelList u, err := url.Parse(req.BaseURL) if err != nil { return &domain.ModelListResp{ - Error: fmt.Errorf("Ollama解析BaseURL失败: %w", err).Error(), + Error: err.Error(), }, nil } u.Path = "/api/tags" @@ -104,7 +104,7 @@ func ModelList(ctx context.Context, req *domain.ModelListReq) (*domain.ModelList client, err := generativeGenai.NewClient(ctx, option.WithAPIKey(req.APIKey)) if err != nil { return &domain.ModelListResp{ - Error: fmt.Errorf("创建Gemini客户端失败: %w", err).Error(), + Error: err.Error(), }, nil } defer func() { @@ -148,7 +148,7 @@ func ModelList(ctx context.Context, req *domain.ModelListReq) (*domain.ModelList models, err := reqModelListApi(req, httpClient, &domain.GithubResp{}) if err != nil { return &domain.ModelListResp{ - Error: fmt.Errorf("获取Github模型列表失败: %w", err).Error(), + Error: err.Error(), }, nil } return &domain.ModelListResp{ @@ -160,7 +160,7 @@ func ModelList(ctx context.Context, req *domain.ModelListReq) (*domain.ModelList if err != nil { return &domain.ModelListResp{ - Error: fmt.Errorf("获取OpenAI兼容模型列表失败: %w", err).Error(), + Error: err.Error(), }, nil } return &domain.ModelListResp{ @@ -288,7 +288,7 @@ func GetChatModel(ctx context.Context, model *domain.ModelMetadata) (model.BaseC Temperature: temperature, }) if err != nil { - return nil, fmt.Errorf("创建DeepSeek聊天模型失败: %w", err) + return nil, err } return chatModel, nil case consts.ModelProviderGemini: @@ -296,7 +296,7 @@ func GetChatModel(ctx context.Context, model *domain.ModelMetadata) (model.BaseC APIKey: model.APIKey, }) if err != nil { - return nil, fmt.Errorf("创建Genai客户端失败: %w", err) + return nil, err } chatModel, err := gemini.NewChatModel(ctx, &gemini.Config{ @@ -308,13 +308,13 @@ func GetChatModel(ctx context.Context, model *domain.ModelMetadata) (model.BaseC }, }) if err != nil { - return nil, fmt.Errorf("创建Gemini聊天模型失败: %w", err) + return nil, err } return chatModel, nil case consts.ModelProviderOllama: baseUrl, err := utils.URLRemovePath(config.BaseURL) if err != nil { - return nil, fmt.Errorf("解析Ollama URL失败: %w", err) + return nil, err } chatModel, err := ollama.NewChatModel(ctx, &ollama.ChatModelConfig{ @@ -326,14 +326,14 @@ func GetChatModel(ctx context.Context, model *domain.ModelMetadata) (model.BaseC }, }) if err != nil { - return nil, fmt.Errorf("创建Ollama聊天模型失败: %w", err) + return nil, err } return chatModel, nil // 兼容 openai api default: chatModel, err := openai.NewChatModel(ctx, config) if err != nil { - return nil, fmt.Errorf("创建OpenAI兼容聊天模型失败: %w", err) + return nil, err } return chatModel, nil }