From 412e8b03fc8c7854a6562767ee73c4158c5b30fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=C2=B7Dong?= <98630204+GeorgeDong32@users.noreply.github.com> Date: Sun, 13 Apr 2025 20:38:25 +0800 Subject: [PATCH] fix: Update dashscoop provider configuration and enhance model editing functionality (#4748) * fix(provider config): update dashscoop new links * feat(EditModelsPopup): add grouping function for bailian * fix(isWebSearchModel): Correctly handle the priority of manually setting model support for web search --- src/renderer/src/config/models.ts | 34 +++++++++++++++++-- src/renderer/src/config/providers.ts | 4 +-- .../ProviderSettings/EditModelsPopup.tsx | 12 ++++++- 3 files changed, 45 insertions(+), 5 deletions(-) diff --git a/src/renderer/src/config/models.ts b/src/renderer/src/config/models.ts index b02c478a..015e8ad0 100644 --- a/src/renderer/src/config/models.ts +++ b/src/renderer/src/config/models.ts @@ -2265,6 +2265,12 @@ export function isWebSearchModel(model: Model): boolean { return false } + if (model.type) { + if (model.type.includes('web_search')) { + return true + } + } + const provider = getProviderByModel(model) if (!provider) { @@ -2301,7 +2307,7 @@ export function isWebSearchModel(model: Model): boolean { } if (provider.id === 'dashscope') { - const models = ['qwen-turbo', 'qwen-max', 'qwen-plus'] + const models = ['qwen-turbo', 'qwen-max', 'qwen-plus', 'qwq'] // matches id like qwen-max-0919, qwen-max-latest return models.some((i) => model.id.startsWith(i)) } @@ -2310,7 +2316,7 @@ export function isWebSearchModel(model: Model): boolean { return true } - return model.type?.includes('web_search') || false + return false } export function isGenerateImageModel(model: Model): boolean { @@ -2406,3 +2412,27 @@ export function isHunyuanSearchModel(model?: Model): boolean { return false } + +/** + * 按 Qwen 系列模型分组 + * @param models 模型列表 + * @returns 分组后的模型 + */ +export function groupQwenModels(models: Model[]): Record { + return models.reduce( + (groups, model) => { + // 匹配 Qwen 系列模型的前缀 + const prefixMatch = model.id.match(/^(qwen(?:\d+\.\d+|2(?:\.\d+)?|-\d+b|-(?:max|coder|vl)))/i) + // 匹配 qwen2.5、qwen2、qwen-7b、qwen-max、qwen-coder 等 + const groupKey = prefixMatch ? prefixMatch[1] : model.group || '其他' + + if (!groups[groupKey]) { + groups[groupKey] = [] + } + groups[groupKey].push(model) + + return groups + }, + {} as Record + ) +} diff --git a/src/renderer/src/config/providers.ts b/src/renderer/src/config/providers.ts index 07e10528..54d9f9c4 100644 --- a/src/renderer/src/config/providers.ts +++ b/src/renderer/src/config/providers.ts @@ -319,9 +319,9 @@ export const PROVIDER_CONFIG = { }, websites: { official: 'https://www.aliyun.com/product/bailian', - apiKey: 'https://bailian.console.aliyun.com/?apiKey=1#/api-key', + apiKey: 'https://bailian.console.aliyun.com/?tab=model#/api-key', docs: 'https://help.aliyun.com/zh/model-studio/getting-started/', - models: 'https://bailian.console.aliyun.com/model-market#/model-market' + models: 'https://bailian.console.aliyun.com/?tab=model#/model-market' } }, stepfun: { diff --git a/src/renderer/src/pages/settings/ProviderSettings/EditModelsPopup.tsx b/src/renderer/src/pages/settings/ProviderSettings/EditModelsPopup.tsx index e55182d1..8cea1aed 100644 --- a/src/renderer/src/pages/settings/ProviderSettings/EditModelsPopup.tsx +++ b/src/renderer/src/pages/settings/ProviderSettings/EditModelsPopup.tsx @@ -4,6 +4,7 @@ import CustomTag from '@renderer/components/CustomTag' import ModelTagsWithLabel from '@renderer/components/ModelTagsWithLabel' import { getModelLogo, + groupQwenModels, isEmbeddingModel, isFunctionCallingModel, isReasoningModel, @@ -81,7 +82,16 @@ const PopupContainer: React.FC = ({ provider: _provider, resolve }) => { } }) - const modelGroups = groupBy(list, 'group') + const modelGroups = + provider.id === 'dashscope' + ? { + ...groupBy( + list.filter((model) => !model.id.startsWith('qwen')), + 'group' + ), + ...groupQwenModels(list.filter((model) => model.id.startsWith('qwen'))) + } + : groupBy(list, 'group') const onOk = () => { setOpen(false)