From cc818f803268881ce556fba1b0069d9b92225302 Mon Sep 17 00:00:00 2001 From: Protocol Zero <257158451+Protocol-zero-0@users.noreply.github.com> Date: Sun, 22 Mar 2026 00:57:52 +0800 Subject: [PATCH] fix(provider): only set thinkingConfig for models with reasoning capability (#18283) --- packages/opencode/src/provider/transform.ts | 12 ++-- .../opencode/test/provider/transform.test.ts | 66 +++++++++++++++++++ 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"