fix(app): remember selected model variant when switching sessions/projects (#27029)

This commit is contained in:
Brendan Allan
2026-05-12 17:44:50 +08:00
committed by GitHub
parent caf1151cb5
commit d276d96cdf
+13 -5
View File
@@ -44,7 +44,7 @@ const migrate = (value: unknown) => {
} }
const clone = (value: State | undefined) => { const clone = (value: State | undefined) => {
if (!value) return undefined if (!value) return
return { return {
...value, ...value,
model: value.model ? { ...value.model } : undefined, model: value.model ? { ...value.model } : undefined,
@@ -104,7 +104,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
const pickAgent = (name: string | undefined) => { const pickAgent = (name: string | undefined) => {
const items = list() const items = list()
if (items.length === 0) return undefined if (items.length === 0) return
return items.find((item) => item.name === name) ?? items[0] return items.find((item) => item.name === name) ?? items[0]
} }
@@ -227,14 +227,14 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
() => agent.current()?.model, () => agent.current()?.model,
fallback, fallback,
) )
if (!item) return undefined if (!item) return
return models.find(item) return models.find(item)
} }
const configured = () => { const configured = () => {
const item = agent.current() const item = agent.current()
const model = current() const model = current()
if (!item || !model) return undefined if (!item || !model) return
return getConfiguredAgentVariant({ return getConfiguredAgentVariant({
agent: { model: item.model, variant: item.variant }, agent: { model: item.model, variant: item.variant },
model: { providerID: model.provider.id, modelID: model.id, variants: model.variants }, model: { providerID: model.provider.id, modelID: model.id, variants: model.variants },
@@ -314,11 +314,16 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
configured, configured,
selected, selected,
current() { current() {
return resolveModelVariant({ const resolved = resolveModelVariant({
variants: this.list(), variants: this.list(),
selected: this.selected(), selected: this.selected(),
configured: this.configured(), configured: this.configured(),
}) })
if (resolved) return resolved
const model = current()
if (!model) return
const saved = models.variant.get({ providerID: model.provider.id, modelID: model.id })
if (saved && this.list().includes(saved)) return saved
}, },
list() { list() {
const item = current() const item = current()
@@ -335,6 +340,9 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
variant: value ?? null, variant: value ?? null,
}) })
write({ variant: value ?? null }) write({ variant: value ?? null })
if (model) {
models.variant.set({ providerID: model.provider.id, modelID: model.id }, value ?? undefined)
}
}) })
}, },
cycle() { cycle() {