From 45fd9fee7bffdb041c1d555685133ae57b64b0a4 Mon Sep 17 00:00:00 2001 From: iven Date: Tue, 14 Apr 2026 07:08:56 +0800 Subject: [PATCH] =?UTF-8?q?fix(desktop):=20P0-1=20=E9=AA=8C=E8=AF=81=20Saa?= =?UTF-8?q?S=20=E6=A8=A1=E5=9E=8B=E9=80=89=E6=8B=A9=20=E2=80=94=20?= =?UTF-8?q?=E9=98=B2=E6=AD=A2=E6=AE=8B=E7=95=99=E6=A8=A1=E5=9E=8B=20ID=20?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E8=AF=B7=E6=B1=82=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tauri 桌面端通过 SaaS Token Pool 中转访问 LLM,模型列表由 SaaS 后端 动态提供。之前的实现直接使用 conversationStore 持久化的 currentModel, 可能在切换连接模式后使用过期的模型 ID,导致 relay 请求失败。 修复: - Tauri 路径:用 SaaS relayModels 的 id+alias 构建 validModelIds 集合, preferredModel 仅在集合内时才使用,否则回退到第一个可用模型 - 浏览器路径:同样验证 currentModel 在 SaaS 模型列表中才使用 后端 cache.resolve_model() 别名解析作为二道防线保留。 --- desktop/src/store/connectionStore.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/desktop/src/store/connectionStore.ts b/desktop/src/store/connectionStore.ts index cd6d438..6b4f929 100644 --- a/desktop/src/store/connectionStore.ts +++ b/desktop/src/store/connectionStore.ts @@ -501,7 +501,14 @@ export const useConnectionStore = create((set, get) => { if (!fallbackId) { throw new Error('可用模型数据格式异常,请刷新页面重试'); } - const modelToUse = preferredModel || fallbackId; + // 验证 preferredModel 是否在 SaaS 可用模型列表中 + // 避免使用上一次非 SaaS 会话残留的模型 ID + const validModelIds = new Set( + relayModels.flatMap(m => [m.id, ...(m.alias ? [m.alias] : [])]) + ); + const modelToUse = (preferredModel && validModelIds.has(preferredModel)) + ? preferredModel + : fallbackId; kernelClient.setConfig({ provider: 'custom', @@ -540,12 +547,16 @@ export const useConnectionStore = create((set, get) => { if (!fallbackModelId) { throw new Error('可用模型数据格式异常,请刷新页面重试'); } + // 浏览器路径也验证模型是否在 SaaS 列表中 + const validBrowserModelIds = new Set( + relayModels.flatMap(m => [m.id, ...(m.alias ? [m.alias] : [])]) + ); const relayClient = createSaaSRelayGatewayClient(session.saasUrl, () => { // 每次调用时读取 conversationStore 的 currentModel,fallback 到第一个可用模型 try { const { useConversationStore } = require('./chat/conversationStore'); const current = useConversationStore.getState().currentModel; - return current || fallbackModelId; + return (current && validBrowserModelIds.has(current)) ? current : fallbackModelId; } catch { return fallbackModelId; }