From e13dfb030c4dd30393f0da8b867cf4ebcb285274 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Wed, 24 Dec 2025 20:29:13 +0000 Subject: [PATCH] fix: clarify Gemini thinkingConfig support guard to prevent 400 errors --- src/api/transform/reasoning.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/api/transform/reasoning.ts b/src/api/transform/reasoning.ts index e726ce3223..887810db00 100644 --- a/src/api/transform/reasoning.ts +++ b/src/api/transform/reasoning.ts @@ -131,6 +131,11 @@ export const getGeminiReasoning = ({ reasoningEffort, settings, }: GetModelReasoningOptions): GeminiReasoningParams | undefined => { + // Only send thinkingConfig to models that advertise support for it; Gemini 3 rejects + // the field and returns 400 otherwise. + const supportsThinkingConfig = + typeof model.maxThinkingTokens === "number" || model.supportsReasoningBudget || model.supportsReasoningEffort + // Budget-based (2.5) models: use thinkingBudget, not thinkingLevel. if (shouldUseReasoningBudget({ model, settings })) { return { thinkingBudget: reasoningBudget!, includeThoughts: true } @@ -150,6 +155,11 @@ export const getGeminiReasoning = ({ return undefined } + // Skip thinking config for models that don't advertise support (e.g., Gemini 3). + if (!supportsThinkingConfig) { + return undefined + } + // Effort-based models on Google GenAI support minimal/low/medium/high levels. if (!isGeminiThinkingLevel(selectedEffort)) { return undefined