diff --git a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarChat.tsx b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarChat.tsx
index 9c31e142..efc3bd45 100644
--- a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarChat.tsx
+++ b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarChat.tsx
@@ -20,7 +20,7 @@ import { VOID_CTRL_L_ACTION_ID } from '../../../actionIDs.js';
import { VOID_OPEN_SETTINGS_ACTION_ID } from '../../../voidSettingsPane.js';
import { ChatMode, FeatureName, isFeatureNameDisabled } from '../../../../../../../workbench/contrib/void/common/voidSettingsTypes.js';
import { WarningBox } from '../void-settings-tsx/WarningBox.js';
-import { getModelCapabilities, getIsResoningEnabledState } from '../../../../common/modelCapabilities.js';
+import { getModelCapabilities, getIsReasoningEnabledState } from '../../../../common/modelCapabilities.js';
import { AlertTriangle, Ban, ChevronRight, Dot, Pencil, Undo, Undo2, X } from 'lucide-react';
import { ChatMessage, CheckpointEntry, StagingSelectionItem, ToolMessage, ToolRequestApproval } from '../../../../common/chatThreadServiceTypes.js';
import { ToolCallParams, ToolName, toolNames, ToolNameWithApproval } from '../../../../common/toolsServiceTypes.js';
@@ -158,7 +158,7 @@ const ReasoningOptionSlider = ({ featureName }: { featureName: FeatureName }) =>
const { canTurnOffReasoning, reasoningBudgetSlider } = reasoningCapabilities || {}
const modelSelectionOptions = voidSettingsState.optionsOfModelSelection[featureName][providerName]?.[modelName]
- const isReasoningEnabled = getIsResoningEnabledState(providerName, modelName, modelSelectionOptions)
+ const isReasoningEnabled = getIsReasoningEnabledState(featureName, providerName, modelName, modelSelectionOptions)
if (canTurnOffReasoning && !reasoningBudgetSlider) { // if it's just a on/off toggle without a power slider (no models right now)
return null // unused right now
// return
@@ -174,12 +174,13 @@ const ReasoningOptionSlider = ({ featureName }: { featureName: FeatureName }) =>
if (reasoningBudgetSlider?.type === 'slider') { // if it's a slider
const { min: min_, max, default: defaultVal } = reasoningBudgetSlider
- const value = voidSettingsState.optionsOfModelSelection[featureName][modelSelection.providerName]?.[modelSelection.modelName]?.reasoningBudget ?? defaultVal
-
const nSteps = 8 // only used in calculating stepSize, stepSize is what actually matters
const stepSize = Math.round((max - min_) / nSteps)
const min = canTurnOffReasoning ? min_ - stepSize : min_
+ const value = isReasoningEnabled ? min_ - stepSize
+ : voidSettingsState.optionsOfModelSelection[featureName][modelSelection.providerName]?.[modelSelection.modelName]?.reasoningBudget ?? defaultVal
+
return
Thinking
{
- const { supportsReasoning } = getModelCapabilities(providerName, modelName).reasoningCapabilities || {}
+ const { supportsReasoning, canTurnOffReasoning } = getModelCapabilities(providerName, modelName).reasoningCapabilities || {}
if (!supportsReasoning) return false
- const defaultEnabledVal = true // if can't toggle reasoning, then this must be true. just true as default
+ // default to enabled if can't turn off, or if the featureName is Chat.
+ const defaultEnabledVal = featureName === 'Chat' || !canTurnOffReasoning
+
const isReasoningEnabled = modelSelectionOptions?.reasoningEnabled ?? defaultEnabledVal
return isReasoningEnabled
}
@@ -823,6 +826,7 @@ export const getIsResoningEnabledState = (
// used to force reasoning state (complex) into something simple we can just read from when sending a message
export const getSendableReasoningInfo = (
+ featureName: FeatureName,
providerName: ProviderName,
modelName: string,
modelSelectionOptions: ModelSelectionOptions | undefined,
@@ -830,7 +834,7 @@ export const getSendableReasoningInfo = (
const { canIOReasoning, reasoningBudgetSlider } = getModelCapabilities(providerName, modelName).reasoningCapabilities || {}
if (!canIOReasoning) return null
- const isReasoningEnabled = getIsResoningEnabledState(providerName, modelName, modelSelectionOptions)
+ const isReasoningEnabled = getIsReasoningEnabledState(featureName, providerName, modelName, modelSelectionOptions)
if (!isReasoningEnabled) return null
// check for reasoning budget
diff --git a/src/vs/workbench/contrib/void/electron-main/llmMessage/sendLLMMessage.impl.ts b/src/vs/workbench/contrib/void/electron-main/llmMessage/sendLLMMessage.impl.ts
index 1d61af41..a4bce5b9 100644
--- a/src/vs/workbench/contrib/void/electron-main/llmMessage/sendLLMMessage.impl.ts
+++ b/src/vs/workbench/contrib/void/electron-main/llmMessage/sendLLMMessage.impl.ts
@@ -165,7 +165,7 @@ const _sendOpenAICompatibleChat = ({ messages: messages_, onText, onFinalMessage
// reasoning
const { canIOReasoning, openSourceThinkTags, } = reasoningCapabilities || {}
- const reasoningInfo = getSendableReasoningInfo(providerName, modelName_, modelSelectionOptions) // user's modelName_ here
+ const reasoningInfo = getSendableReasoningInfo('Chat', providerName, modelName_, modelSelectionOptions) // user's modelName_ here
const includeInPayload = providerReasoningIOSettings?.input?.includeInPayload?.(reasoningInfo) || {}
// tools
@@ -325,7 +325,7 @@ const sendAnthropicChat = ({ messages: messages_, providerName, onText, onFinalM
const { providerReasoningIOSettings } = getProviderCapabilities(providerName)
// reasoning
- const reasoningInfo = getSendableReasoningInfo(providerName, modelName_, modelSelectionOptions) // user's modelName_ here
+ const reasoningInfo = getSendableReasoningInfo('Chat', providerName, modelName_, modelSelectionOptions) // user's modelName_ here
const includeInPayload = providerReasoningIOSettings?.input?.includeInPayload?.(reasoningInfo) || {}
// tools