diff --git a/.changeset/heavy-cases-sing.md b/.changeset/heavy-cases-sing.md new file mode 100644 index 0000000000..3e61762dba --- /dev/null +++ b/.changeset/heavy-cases-sing.md @@ -0,0 +1,5 @@ +--- +"kilo-code": patch +--- + +Fix: Honor explicit 'disable' for reasoning effort diff --git a/src/api/providers/base-openai-compatible-provider.ts b/src/api/providers/base-openai-compatible-provider.ts index b8923210c2..6cce568740 100644 --- a/src/api/providers/base-openai-compatible-provider.ts +++ b/src/api/providers/base-openai-compatible-provider.ts @@ -101,10 +101,22 @@ export abstract class BaseOpenAiCompatibleProvider }), } - // Add thinking parameter if reasoning is enabled and model supports it - if (this.options.enableReasoningEffort && info.supportsReasoningBinary) { - ;(params as any).thinking = { type: "enabled" } + // kilocode_change start - Add reasoning effort and thinking parameters + if (this.options.enableReasoningEffort) { + const effort = this.options.reasoningEffort || info.reasoningEffort + const isExplicitlyDisabled = effort === "disable" + + if (info.supportsReasoningBinary && !isExplicitlyDisabled) { + ;(params as any).thinking = { type: "enabled" } + } + + if (info.supportsReasoningEffort && !isExplicitlyDisabled) { + if (effort) { + ;(params as any).reasoning_effort = effort + } + } } + // kilocode_change end try { return this.client.chat.completions.create(params, requestOptions) @@ -232,10 +244,22 @@ export abstract class BaseOpenAiCompatibleProvider messages: [{ role: "user", content: prompt }], } - // Add thinking parameter if reasoning is enabled and model supports it - if (this.options.enableReasoningEffort && modelInfo.supportsReasoningBinary) { - ;(params as any).thinking = { type: "enabled" } + // kilocode_change start - Add reasoning effort and thinking parameters + if (this.options.enableReasoningEffort) { + const effort = this.options.reasoningEffort || modelInfo.reasoningEffort + const isExplicitlyDisabled = effort === "disable" + + if (modelInfo.supportsReasoningBinary && !isExplicitlyDisabled) { + ;(params as any).thinking = { type: "enabled" } + } + + if (modelInfo.supportsReasoningEffort && !isExplicitlyDisabled) { + if (effort) { + ;(params as any).reasoning_effort = effort + } + } } + // kilocode_change end try { const response = await this.client.chat.completions.create(params) diff --git a/webview-ui/src/components/settings/providers/OpenAICompatible.tsx b/webview-ui/src/components/settings/providers/OpenAICompatible.tsx index 4eea6f09f1..bd9853e23f 100644 --- a/webview-ui/src/components/settings/providers/OpenAICompatible.tsx +++ b/webview-ui/src/components/settings/providers/OpenAICompatible.tsx @@ -264,6 +264,11 @@ export const OpenAICompatible = ({ ...openAiCustomModelInfo, reasoningEffort: value as ReasoningEffort, }) + // kilocode_change start - also set reasoningEffort on API config + setApiConfigurationField("reasoningEffort", value as ReasoningEffort) + } else { + setApiConfigurationField(field, value) + // kilocode_change end } }} modelInfo={{