summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorProtocol Zero <[email protected]>2026-03-22 00:57:52 +0800
committerGitHub <[email protected]>2026-03-21 11:57:52 -0500
commitcc818f803268881ce556fba1b0069d9b92225302 (patch)
treeb37249f814fa73dcdd4ffd16feaab469496a6431
parentd5337b41f45f1948cbebadfb6714dc90afe62a8c (diff)
downloadopencode-cc818f803268881ce556fba1b0069d9b92225302.tar.gz
opencode-cc818f803268881ce556fba1b0069d9b92225302.zip
fix(provider): only set thinkingConfig for models with reasoning capability (#18283)
-rw-r--r--packages/opencode/src/provider/transform.ts12
-rw-r--r--packages/opencode/test/provider/transform.test.ts66
2 files changed, 73 insertions, 5 deletions
diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts
index 05b9f031f..8298351ae 100644
--- a/packages/opencode/src/provider/transform.ts
+++ b/packages/opencode/src/provider/transform.ts
@@ -755,11 +755,13 @@ export namespace ProviderTransform {
}
if (input.model.api.npm === "@ai-sdk/google" || input.model.api.npm === "@ai-sdk/google-vertex") {
- result["thinkingConfig"] = {
- includeThoughts: true,
- }
- if (input.model.api.id.includes("gemini-3")) {
- result["thinkingConfig"]["thinkingLevel"] = "high"
+ if (input.model.capabilities.reasoning) {
+ result["thinkingConfig"] = {
+ includeThoughts: true,
+ }
+ if (input.model.api.id.includes("gemini-3")) {
+ result["thinkingConfig"]["thinkingLevel"] = "high"
+ }
}
}
diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts
index 917d357ea..370edeed3 100644
--- a/packages/opencode/test/provider/transform.test.ts
+++ b/packages/opencode/test/provider/transform.test.ts
@@ -104,6 +104,72 @@ describe("ProviderTransform.options - setCacheKey", () => {
})
})
+describe("ProviderTransform.options - google thinkingConfig gating", () => {
+ const sessionID = "test-session-123"
+
+ const createGoogleModel = (reasoning: boolean, npm: "@ai-sdk/google" | "@ai-sdk/google-vertex") =>
+ ({
+ id: `${npm === "@ai-sdk/google" ? "google" : "google-vertex"}/gemini-2.0-flash`,
+ providerID: npm === "@ai-sdk/google" ? "google" : "google-vertex",
+ api: {
+ id: "gemini-2.0-flash",
+ url: npm === "@ai-sdk/google" ? "https://generativelanguage.googleapis.com" : "https://vertexai.googleapis.com",
+ npm,
+ },
+ name: "Gemini 2.0 Flash",
+ capabilities: {
+ temperature: true,
+ reasoning,
+ attachment: true,
+ toolcall: true,
+ input: { text: true, audio: false, image: true, video: false, pdf: true },
+ output: { text: true, audio: false, image: false, video: false, pdf: false },
+ interleaved: false,
+ },
+ cost: {
+ input: 0.001,
+ output: 0.002,
+ cache: { read: 0.0001, write: 0.0002 },
+ },
+ limit: {
+ context: 1_000_000,
+ output: 8192,
+ },
+ status: "active",
+ options: {},
+ headers: {},
+ }) as any
+
+ test("does not set thinkingConfig for google models without reasoning capability", () => {
+ const result = ProviderTransform.options({
+ model: createGoogleModel(false, "@ai-sdk/google"),
+ sessionID,
+ providerOptions: {},
+ })
+ expect(result.thinkingConfig).toBeUndefined()
+ })
+
+ test("sets thinkingConfig for google models with reasoning capability", () => {
+ const result = ProviderTransform.options({
+ model: createGoogleModel(true, "@ai-sdk/google"),
+ sessionID,
+ providerOptions: {},
+ })
+ expect(result.thinkingConfig).toEqual({
+ includeThoughts: true,
+ })
+ })
+
+ test("does not set thinkingConfig for vertex models without reasoning capability", () => {
+ const result = ProviderTransform.options({
+ model: createGoogleModel(false, "@ai-sdk/google-vertex"),
+ sessionID,
+ providerOptions: {},
+ })
+ expect(result.thinkingConfig).toBeUndefined()
+ })
+})
+
describe("ProviderTransform.options - gpt-5 textVerbosity", () => {
const sessionID = "test-session-123"