From d57bb824b637114ecd37d65b3ce6ca07f13486fb Mon Sep 17 00:00:00 2001 From: Roo Code Date: Wed, 27 Aug 2025 03:16:20 +0000 Subject: [PATCH] fix: ensure OpenAI reasoning effort supports minimal value - Remove special case that filtered out "minimal" reasoning effort for OpenAI - OpenAI models (including GPT-5) support all effort levels including "minimal" - Add comprehensive tests for all reasoning effort values including "minimal" - Align OpenAI behavior with OpenRouter which correctly passes through "minimal" --- src/api/transform/__tests__/reasoning.spec.ts | 39 +++++++++++++++++-- src/api/transform/reasoning.ts | 8 +--- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/api/transform/__tests__/reasoning.spec.ts b/src/api/transform/__tests__/reasoning.spec.ts index fc0983d741..b6fb4816fc 100644 --- a/src/api/transform/__tests__/reasoning.spec.ts +++ b/src/api/transform/__tests__/reasoning.spec.ts @@ -530,21 +530,54 @@ describe("reasoning.ts", () => { expect(result).toEqual({ reasoning_effort: undefined }) }) - it("should handle all reasoning effort values", () => { - const efforts: Array<"low" | "medium" | "high"> = ["low", "medium", "high"] + it("should handle all reasoning effort values including minimal", () => { + const efforts: Array = ["minimal", "low", "medium", "high"] efforts.forEach((effort) => { const modelWithEffort: ModelInfo = { ...baseModel, + supportsReasoningEffort: true, + } + + const settingsWithEffort: ProviderSettings = { reasoningEffort: effort, } - const options = { ...baseOptions, model: modelWithEffort, reasoningEffort: effort } + const options = { + ...baseOptions, + model: modelWithEffort, + settings: settingsWithEffort, + reasoningEffort: effort, + } const result = getOpenAiReasoning(options) + // All effort values including "minimal" should be passed through for OpenAI (e.g., GPT-5) expect(result).toEqual({ reasoning_effort: effort }) }) }) + it("should handle minimal reasoning effort specifically", () => { + const modelWithEffort: ModelInfo = { + ...baseModel, + supportsReasoningEffort: true, + } + + const settingsWithMinimal: ProviderSettings = { + reasoningEffort: "minimal", + } + + const options = { + ...baseOptions, + model: modelWithEffort, + settings: settingsWithMinimal, + reasoningEffort: "minimal" as ReasoningEffortWithMinimal, + } + + const result = getOpenAiReasoning(options) + + // "minimal" should be passed through for OpenAI models like GPT-5 + expect(result).toEqual({ reasoning_effort: "minimal" }) + }) + it("should not be affected by reasoningBudget parameter", () => { const modelWithEffort: ModelInfo = { ...baseModel, diff --git a/src/api/transform/reasoning.ts b/src/api/transform/reasoning.ts index fff288e3f0..367c463662 100644 --- a/src/api/transform/reasoning.ts +++ b/src/api/transform/reasoning.ts @@ -62,12 +62,8 @@ export const getOpenAiReasoning = ({ return undefined } - // If model has reasoning effort capability, return object even if effort is undefined - // This preserves the reasoning_effort field in the API call - if (reasoningEffort === "minimal") { - return undefined - } - + // If model has reasoning effort capability, return object with the effort + // OpenAI models (including GPT-5) support all effort levels including "minimal" return { reasoning_effort: reasoningEffort } }