diff --git a/src/api/providers/openai.ts b/src/api/providers/openai.ts index 203eb44040..8551d812a3 100644 --- a/src/api/providers/openai.ts +++ b/src/api/providers/openai.ts @@ -13,6 +13,9 @@ import { convertToR1Format } from "../transform/r1-format" import { convertToSimpleMessages } from "../transform/simple-format" import { ApiStream } from "../transform/stream" +export const DEEP_SEEK_DEFAULT_TEMPERATURE = 0.6 +const OPENAI_DEFAULT_TEMPERATURE = 0 + export class OpenAiHandler implements ApiHandler, SingleCompletionHandler { protected options: ApiHandlerOptions private client: OpenAI @@ -70,7 +73,9 @@ export class OpenAiHandler implements ApiHandler, SingleCompletionHandler { const requestOptions: OpenAI.Chat.Completions.ChatCompletionCreateParamsStreaming = { model: modelId, - temperature: 0, + temperature: + this.options.modelTemperature ?? + (deepseekReasoner ? DEEP_SEEK_DEFAULT_TEMPERATURE : OPENAI_DEFAULT_TEMPERATURE), messages: convertedMessages, stream: true as const, stream_options: { include_usage: true }, diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 74e797e4a1..1051267c43 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -123,6 +123,7 @@ type GlobalStateKey = | "customModes" // Array of custom modes | "unboundModelId" | "unboundModelInfo" + | "modelTemperature" export const GlobalFileNames = { apiConversationHistory: "api_conversation_history.json", @@ -1587,6 +1588,7 @@ export class ClineProvider implements vscode.WebviewViewProvider { unboundApiKey, unboundModelId, unboundModelInfo, + modelTemperature, } = apiConfiguration await this.updateGlobalState("apiProvider", apiProvider) await this.updateGlobalState("apiModelId", apiModelId) @@ -1628,6 +1630,7 @@ export class ClineProvider implements vscode.WebviewViewProvider { await this.storeSecret("unboundApiKey", unboundApiKey) await this.updateGlobalState("unboundModelId", unboundModelId) await this.updateGlobalState("unboundModelInfo", unboundModelInfo) + await this.updateGlobalState("modelTemperature", modelTemperature) if (this.cline) { this.cline.api = buildApiHandler(apiConfiguration) } @@ -2388,6 +2391,7 @@ export class ClineProvider implements vscode.WebviewViewProvider { unboundApiKey, unboundModelId, unboundModelInfo, + modelTemperature, ] = await Promise.all([ this.getGlobalState("apiProvider") as Promise, this.getGlobalState("apiModelId") as Promise, @@ -2464,6 +2468,7 @@ export class ClineProvider implements vscode.WebviewViewProvider { this.getSecret("unboundApiKey") as Promise, this.getGlobalState("unboundModelId") as Promise, this.getGlobalState("unboundModelInfo") as Promise, + this.getGlobalState("modelTemperature") as Promise, ]) let apiProvider: ApiProvider @@ -2522,6 +2527,7 @@ export class ClineProvider implements vscode.WebviewViewProvider { unboundApiKey, unboundModelId, unboundModelInfo, + modelTemperature, }, lastShownAnnouncementId, customInstructions, diff --git a/src/shared/api.ts b/src/shared/api.ts index 77c73a8c36..5f41130990 100644 --- a/src/shared/api.ts +++ b/src/shared/api.ts @@ -61,6 +61,7 @@ export interface ApiHandlerOptions { unboundApiKey?: string unboundModelId?: string unboundModelInfo?: ModelInfo + modelTemperature?: number } export type ApiConfiguration = ApiHandlerOptions & {