From 27b4e0a1702b9a37d9228ba25f2e046b48a61b0e Mon Sep 17 00:00:00 2001 From: leonliu76-web <255451919+leonliu76-web@users.noreply.github.com> Date: Wed, 10 Jun 2026 16:21:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AE=BE=E7=BD=AE=E9=A1=B5?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E8=83=BD=E5=8A=9B=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- desktop/src/pages/Settings.tsx | 10 +++++++++- desktop/src/pages/settings/shared.tsx | 7 +++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/desktop/src/pages/Settings.tsx b/desktop/src/pages/Settings.tsx index e8f326fd..c9b390ad 100644 --- a/desktop/src/pages/Settings.tsx +++ b/desktop/src/pages/Settings.tsx @@ -51,6 +51,7 @@ import { normalizeImageModelFetchBaseURL, normalizeAiModelDescriptors, normalizeSourceModels, + isLikelyTranscriptionModel, parseAiSources, parseEnvText, parseMcpServers, @@ -1108,6 +1109,13 @@ export function Settings({ ? (sourceModelCapabilityDrafts[addModelModalSource.id] || 'chat') : 'chat'; + const resolveCandidateModelCapability = useCallback((model: AiModelDescriptor): ModelCapability => { + if (model.capabilities.includes('transcription') || isLikelyTranscriptionModel(model.id)) { + return 'transcription'; + } + return model.capabilities.find((capability) => capability !== 'chat') || model.capabilities[0] || 'chat'; + }, []); + const groupedAiPresets = useMemo(() => { const codingPlan = AI_SOURCE_PRESETS.filter((preset) => preset.group === 'coding-plan'); const general = AI_SOURCE_PRESETS.filter((preset) => preset.group !== 'coding-plan'); @@ -5860,7 +5868,7 @@ export function Settings({ setSourceModelDrafts((prev) => ({ ...prev, [addModelModalSource.id]: item.id })); setSourceModelCapabilityDrafts((prev) => ({ ...prev, - [addModelModalSource.id]: item.capabilities[0] || 'chat', + [addModelModalSource.id]: resolveCandidateModelCapability(item), })); }} className="px-2 py-1 text-[11px] rounded border border-border hover:bg-surface-secondary transition-colors flex items-center gap-1.5" diff --git a/desktop/src/pages/settings/shared.tsx b/desktop/src/pages/settings/shared.tsx index 9594b5b4..de3eb9e4 100644 --- a/desktop/src/pages/settings/shared.tsx +++ b/desktop/src/pages/settings/shared.tsx @@ -1460,12 +1460,15 @@ export const toAiModelDescriptor = ( ...(Array.isArray(model?.capabilities) ? model.capabilities : []), model?.capability, ]; - const capabilities = explicitCapabilities.some((value) => String(value || '').trim()) + const hasExplicitCapabilities = explicitCapabilities.some((value) => String(value || '').trim()); + const capabilities = hasExplicitCapabilities ? normalizeModelCapabilities(explicitCapabilities) : inferModelCapabilities(id); return { id, - capabilities: forcedCapabilities.length > 0 ? forcedCapabilities : capabilities, + capabilities: hasExplicitCapabilities + ? capabilities + : (forcedCapabilities.length > 0 ? forcedCapabilities : capabilities), inputCapabilities: getModelInputCapabilities(id), }; };