Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion packages/types/src/model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,11 @@ export type ReasoningEffort = z.infer<typeof reasoningEffortsSchema>
* ReasoningEffortWithMinimal
*/

export const reasoningEffortWithMinimalSchema = z.union([reasoningEffortsSchema, z.literal("minimal")])
export const reasoningEffortWithMinimalSchema = z.union([
reasoningEffortsSchema,
z.literal("minimal"),
z.literal("off"),
])

export type ReasoningEffortWithMinimal = z.infer<typeof reasoningEffortWithMinimalSchema>

Expand Down
4 changes: 3 additions & 1 deletion src/api/providers/requesty.ts
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,9 @@ export class RequestyHandler extends BaseProvider implements SingleCompletionHan
model,
max_tokens,
temperature,
...(reasoning_effort && reasoning_effort !== "minimal" && { reasoning_effort }),
...(reasoning_effort &&
reasoning_effort !== "minimal" &&
reasoning_effort !== "off" && { reasoning_effort }),
...(thinking && { thinking }),
stream: true,
stream_options: { include_usage: true },
Expand Down
4 changes: 2 additions & 2 deletions src/api/transform/reasoning.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ export const getOpenRouterReasoning = ({
shouldUseReasoningBudget({ model, settings })
? { max_tokens: reasoningBudget }
: shouldUseReasoningEffort({ model, settings })
? reasoningEffort
? reasoningEffort && reasoningEffort !== "off"
? { effort: reasoningEffort }
: undefined
: undefined
Expand All @@ -57,7 +57,7 @@ export const getOpenAiReasoning = ({

// 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") {
if (reasoningEffort === "minimal" || reasoningEffort === "off") {
return undefined
}

Expand Down
5 changes: 5 additions & 0 deletions src/shared/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,11 @@ export const shouldUseReasoningEffort = ({
return false
}

// If reasoningEffort is explicitly set to "off", reasoning should be disabled
if (settings?.reasoningEffort === "off") {
return false
}

// Otherwise, use reasoning if:
// 1. Model supports reasoning effort AND settings provide reasoning effort, OR
// 2. Model itself has a reasoningEffort property
Expand Down
4 changes: 2 additions & 2 deletions webview-ui/src/components/settings/ThinkingBudget.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,8 @@ export const ThinkingBudget = ({ apiConfiguration, setApiConfigurationField, mod
// Build available reasoning efforts list
const baseEfforts = [...reasoningEfforts] as ReasoningEffortWithMinimal[]
const availableReasoningEfforts: ReadonlyArray<ReasoningEffortWithMinimal> = showMinimalOption
? (["minimal", ...baseEfforts] as ReasoningEffortWithMinimal[])
: baseEfforts
? (["off", "minimal", ...baseEfforts] as ReasoningEffortWithMinimal[])
: (["off", ...baseEfforts] as ReasoningEffortWithMinimal[])

// Default reasoning effort - use model's default if available
// GPT-5 models have "medium" as their default in the model configuration
Expand Down
1 change: 1 addition & 0 deletions webview-ui/src/i18n/locales/en/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -465,6 +465,7 @@
},
"reasoningEffort": {
"label": "Model Reasoning Effort",
"off": "Off",
"minimal": "Minimal (Fastest)",
"low": "Low",
"medium": "Medium",
Expand Down
Loading