From b4fd4bb25757250b1bcd4da9e6398011ed07e2f3 Mon Sep 17 00:00:00 2001 From: Huang Qi Date: Mon, 24 Nov 2025 12:51:15 +0800 Subject: [PATCH] fix: add explicit fallback model and prevent direct opencode provider calls (#4653) Co-authored-by: Aiden Cline --- packages/opencode/src/provider/provider.ts | 9 ++++++++- packages/opencode/src/session/prompt.ts | 3 ++- packages/opencode/src/session/summary.ts | 5 ++++- 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)),