summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorHuang Qi <[email protected]>2025-11-24 12:51:15 +0800
committerGitHub <[email protected]>2025-11-23 22:51:15 -0600
commitb4fd4bb25757250b1bcd4da9e6398011ed07e2f3 (patch)
treee375771ea914623f174eafd9d5d25961f15acb95
parenteb009d595921e1cdc91f8c2e396e0a86e3b66117 (diff)
downloadopencode-b4fd4bb25757250b1bcd4da9e6398011ed07e2f3.tar.gz
opencode-b4fd4bb25757250b1bcd4da9e6398011ed07e2f3.zip
fix: add explicit fallback model and prevent direct opencode provider calls (#4653)
Co-authored-by: Aiden Cline <[email protected]>
-rw-r--r--packages/opencode/src/provider/provider.ts9
-rw-r--r--packages/opencode/src/session/prompt.ts3
-rw-r--r--packages/opencode/src/session/summary.ts5
3 files changed, 14 insertions, 3 deletions
diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts
index d632085cf..e6f7f5f88 100644
--- a/packages/opencode/src/provider/provider.ts
+++ b/packages/opencode/src/provider/provider.ts
@@ -685,7 +685,14 @@ export namespace Provider {
}
}
}
- return getModel("opencode", "gpt-5-nano")
+
+ // Check if opencode provider is available before using it
+ const opencodeProvider = await state().then((state) => state.providers["opencode"])
+ if (opencodeProvider && opencodeProvider.info.models["gpt-5-nano"]) {
+ return getModel("opencode", "gpt-5-nano")
+ }
+
+ return undefined
}
const priority = ["gpt-5", "claude-sonnet-4", "big-pickle", "gemini-3-pro"]
diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts
index f550005b3..b3c3c4671 100644
--- a/packages/opencode/src/session/prompt.ts
+++ b/packages/opencode/src/session/prompt.ts
@@ -1408,7 +1408,8 @@ export namespace SessionPrompt {
input.history.filter((m) => m.info.role === "user" && !m.parts.every((p) => "synthetic" in p && p.synthetic))
.length === 1
if (!isFirst) return
- const small = await Provider.getSmallModel(input.providerID)
+ const small =
+ (await Provider.getSmallModel(input.providerID)) ?? (await Provider.getModel(input.providerID, input.modelID))
const options = pipe(
{},
mergeDeep(ProviderTransform.options(small.providerID, small.modelID, small.npm ?? "", input.session.id)),
diff --git a/packages/opencode/src/session/summary.ts b/packages/opencode/src/session/summary.ts
index de2ef2e5c..d9247f182 100644
--- a/packages/opencode/src/session/summary.ts
+++ b/packages/opencode/src/session/summary.ts
@@ -73,7 +73,10 @@ export namespace SessionSummary {
await Session.updateMessage(userMsg)
const assistantMsg = messages.find((m) => m.info.role === "assistant")!.info as MessageV2.Assistant
- const small = await Provider.getSmallModel(assistantMsg.providerID)
+ const small =
+ (await Provider.getSmallModel(assistantMsg.providerID)) ??
+ (await Provider.getModel(assistantMsg.providerID, assistantMsg.modelID))
+
const options = pipe(
{},
mergeDeep(ProviderTransform.options(small.providerID, small.modelID, small.npm ?? "", assistantMsg.sessionID)),