From e6713b07ca3c9ae493a1fa24febc8427ef95abd1 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Wed, 1 Apr 2026 21:07:37 +0000 Subject: [PATCH] fix: do not enforce temperature of 0 for OpenAI compatible provider When no custom temperature is set and the model is not a DeepSeek reasoner, the OpenAI compatible provider was hardcoding temperature=0. This overrode whatever server-side default the provider may have. Changed the fallback to undefined so the temperature field is omitted from the API request, letting the remote provider use its own default. Fixes #12042 --- src/api/providers/__tests__/openai.spec.ts | 2 +- src/api/providers/openai.ts | 5 +++-- src/api/transform/__tests__/model-params.spec.ts | 11 +++++++++++ src/api/transform/model-params.ts | 2 +- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/api/providers/__tests__/openai.spec.ts b/src/api/providers/__tests__/openai.spec.ts index 73b542dbc73..e4bd4c7de1c 100644 --- a/src/api/providers/__tests__/openai.spec.ts +++ b/src/api/providers/__tests__/openai.spec.ts @@ -632,7 +632,7 @@ describe("OpenAiHandler", () => { ], stream: true, stream_options: { include_usage: true }, - temperature: 0, + temperature: undefined, tools: undefined, tool_choice: undefined, parallel_tool_calls: true, diff --git a/src/api/providers/openai.ts b/src/api/providers/openai.ts index 33b29abcafe..2aec02c7f6d 100644 --- a/src/api/providers/openai.ts +++ b/src/api/providers/openai.ts @@ -154,7 +154,8 @@ export class OpenAiHandler extends BaseProvider implements SingleCompletionHandl const requestOptions: OpenAI.Chat.Completions.ChatCompletionCreateParamsStreaming = { model: modelId, - temperature: this.options.modelTemperature ?? (deepseekReasoner ? DEEP_SEEK_DEFAULT_TEMPERATURE : 0), + temperature: + this.options.modelTemperature ?? (deepseekReasoner ? DEEP_SEEK_DEFAULT_TEMPERATURE : undefined), messages: convertedMessages, stream: true as const, ...(isGrokXAI ? {} : { stream_options: { include_usage: true } }), @@ -287,7 +288,7 @@ export class OpenAiHandler extends BaseProvider implements SingleCompletionHandl modelId: id, model: info, settings: this.options, - defaultTemperature: 0, + defaultTemperature: undefined, }) return { id, info, ...params } } diff --git a/src/api/transform/__tests__/model-params.spec.ts b/src/api/transform/__tests__/model-params.spec.ts index a50f1291bef..48bca1b609f 100644 --- a/src/api/transform/__tests__/model-params.spec.ts +++ b/src/api/transform/__tests__/model-params.spec.ts @@ -123,6 +123,17 @@ describe("getModelParams", () => { expect(result.temperature).toBe(0.3) }) + it("should return undefined temperature when defaultTemperature is undefined and no user/model temperature", () => { + const result = getModelParams({ + ...openaiParams, + settings: {}, + model: baseModel, + defaultTemperature: undefined, + }) + + expect(result.temperature).toBeUndefined() + }) + it("should use model maxTokens when available", () => { const model: ModelInfo = { ...baseModel, diff --git a/src/api/transform/model-params.ts b/src/api/transform/model-params.ts index ac04bce37de..8f7885580a5 100644 --- a/src/api/transform/model-params.ts +++ b/src/api/transform/model-params.ts @@ -33,7 +33,7 @@ type GetModelParamsOptions = { modelId: string model: ModelInfo settings: ProviderSettings - defaultTemperature: number + defaultTemperature: number | undefined } type BaseModelParams = {