summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authoradamelmore <[email protected]>2026-01-25 07:01:17 -0600
committeradamelmore <[email protected]>2026-01-25 07:01:36 -0600
commitf7a4cdcd32fd07d91ff24935ce2eacc69f2413a3 (patch)
tree04784f1677cd0beaa3a03512f63d73c9a65f3f40 /packages
parente9152b174f747ac52e567423f4416cb871da0265 (diff)
downloadopencode-f7a4cdcd32fd07d91ff24935ce2eacc69f2413a3.tar.gz
opencode-f7a4cdcd32fd07d91ff24935ce2eacc69f2413a3.zip
fix(app): no default model crash
Diffstat (limited to 'packages')
-rw-r--r--packages/app/src/context/local.tsx24
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)