diff options
| author | adamelmore <[email protected]> | 2026-01-25 07:01:17 -0600 |
|---|---|---|
| committer | adamelmore <[email protected]> | 2026-01-25 07:01:36 -0600 |
| commit | f7a4cdcd32fd07d91ff24935ce2eacc69f2413a3 (patch) | |
| tree | 04784f1677cd0beaa3a03512f63d73c9a65f3f40 /packages/app/src/context | |
| parent | e9152b174f747ac52e567423f4416cb871da0265 (diff) | |
| download | opencode-f7a4cdcd32fd07d91ff24935ce2eacc69f2413a3.tar.gz opencode-f7a4cdcd32fd07d91ff24935ce2eacc69f2413a3.zip | |
fix(app): no default model crash
Diffstat (limited to 'packages/app/src/context')
| -rw-r--r-- | packages/app/src/context/local.tsx | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/packages/app/src/context/local.tsx b/packages/app/src/context/local.tsx index 4a585e06b..43d47e1b1 100644 --- a/packages/app/src/context/local.tsx +++ b/packages/app/src/context/local.tsx @@ -126,7 +126,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ ) const [ephemeral, setEphemeral] = createStore<{ - model: Record<string, ModelKey> + model: Record<string, ModelKey | undefined> }>({ model: {}, }) @@ -182,7 +182,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ const find = (key: ModelKey) => list().find((m) => m.id === key?.modelID && m.provider.id === key.providerID) - const fallbackModel = createMemo(() => { + const fallbackModel = createMemo<ModelKey | undefined>(() => { if (sync.data.config.model) { const [providerID, modelID] = sync.data.config.model.split("/") if (isModelValid({ providerID, modelID })) { @@ -199,16 +199,21 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ } } + const defaults = providers.default() for (const p of providers.connected()) { - if (p.id in providers.default()) { - return { - providerID: p.id, - modelID: providers.default()[p.id], - } + const configured = defaults[p.id] + if (configured) { + const key = { providerID: p.id, modelID: configured } + if (isModelValid(key)) return key } + + const first = Object.values(p.models)[0] + if (!first) continue + const key = { providerID: p.id, modelID: first.id } + if (isModelValid(key)) return key } - throw new Error("No default model found") + return undefined }) const current = createMemo(() => { @@ -266,7 +271,8 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ set(model: ModelKey | undefined, options?: { recent?: boolean }) { batch(() => { const currentAgent = agent.current() - if (currentAgent) setEphemeral("model", currentAgent.name, model ?? fallbackModel()) + const next = model ?? fallbackModel() + if (currentAgent) setEphemeral("model", currentAgent.name, next) if (model) updateVisibility(model, "show") if (options?.recent && model) { const uniq = uniqueBy([model, ...store.recent], (x) => x.providerID + x.modelID) |
