mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-07-19 13:33:35 +08:00
fix(desktop): provider 激活后联动重置聊天页 currentModel
切换模型供应商后聊天页底部选择器仍显示上一个 model, 要手动点一下才切过去。 根因: settings.json 的 model 字段 (explicit current model) 不会在 activateProvider/activateOfficial 时被清除, 但新 provider 的模型列表里 往往没这个旧 id, ModelSelector 就卡在"显示旧名字 + radio 不选中"的状态。 providerStore.activateProvider 成功后主动 setModel(provider.models.main) + settingsStore.fetchAll() 刷新 availableModels / currentModel。 activateOfficial 对应重置到 'claude-opus-4-6' (与后端 DEFAULT_MODEL 一致)。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
05cbc0119e
commit
ec3be47108
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
import { create } from 'zustand'
|
import { create } from 'zustand'
|
||||||
import { providersApi } from '../api/providers'
|
import { providersApi } from '../api/providers'
|
||||||
|
import { useSettingsStore } from './settingsStore'
|
||||||
import type {
|
import type {
|
||||||
SavedProvider,
|
SavedProvider,
|
||||||
CreateProviderInput,
|
CreateProviderInput,
|
||||||
@ -10,6 +11,11 @@ import type {
|
|||||||
ProviderTestResult,
|
ProviderTestResult,
|
||||||
} from '../types/provider'
|
} from '../types/provider'
|
||||||
|
|
||||||
|
// 与后端 src/server/api/models.ts 的 DEFAULT_MODEL 保持一致:
|
||||||
|
// 切回"官方"时把聊天页的 currentModel 重置到这个,避免残留第三方 provider
|
||||||
|
// 的 model id 在官方模型列表里找不到、ModelSelector 显示但不选中的状态。
|
||||||
|
const OFFICIAL_DEFAULT_MODEL_ID = 'claude-opus-4-6'
|
||||||
|
|
||||||
type ProviderStore = {
|
type ProviderStore = {
|
||||||
providers: SavedProvider[]
|
providers: SavedProvider[]
|
||||||
activeId: string | null
|
activeId: string | null
|
||||||
@ -62,11 +68,25 @@ export const useProviderStore = create<ProviderStore>((set, get) => ({
|
|||||||
activateProvider: async (id) => {
|
activateProvider: async (id) => {
|
||||||
await providersApi.activate(id)
|
await providersApi.activate(id)
|
||||||
await get().fetchProviders()
|
await get().fetchProviders()
|
||||||
|
// 联动聊天页:把 currentModel 重置到新 provider 的 main model。
|
||||||
|
// 不这么做的话,用户在切换前手动选过的 model id (写进了 settings.json 的
|
||||||
|
// `model` 字段) 会继续被后端当作 explicit 返回,但新 provider 的模型列表
|
||||||
|
// 里没这个 id, ModelSelector 会卡在"显示旧名字 + radio 不选中"。
|
||||||
|
const provider = get().providers.find((p) => p.id === id)
|
||||||
|
if (provider) {
|
||||||
|
const settings = useSettingsStore.getState()
|
||||||
|
await settings.setModel(provider.models.main)
|
||||||
|
await settings.fetchAll()
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
activateOfficial: async () => {
|
activateOfficial: async () => {
|
||||||
await providersApi.activateOfficial()
|
await providersApi.activateOfficial()
|
||||||
await get().fetchProviders()
|
await get().fetchProviders()
|
||||||
|
// 切回官方时同样重置 currentModel,避免残留第三方 model id。
|
||||||
|
const settings = useSettingsStore.getState()
|
||||||
|
await settings.setModel(OFFICIAL_DEFAULT_MODEL_ID)
|
||||||
|
await settings.fetchAll()
|
||||||
},
|
},
|
||||||
|
|
||||||
testProvider: async (id, overrides?) => {
|
testProvider: async (id, overrides?) => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user