Browse Source

fix: add explicit fallback model and prevent direct opencode provider calls (#4653)

Co-authored-by: Aiden Cline <[email protected]>
Huang Qi 3 months ago
parent
commit
b4fd4bb257

+ 8 - 1
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"]

+ 2 - 1
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)),

+ 4 - 1
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)),