Skip to content

Commit 3a527b7

Browse files
committed
fix: remove Max Tokens slider from ThinkingBudget component
- Removed the redundant Max Tokens slider from ThinkingBudget component - Keep only the Max Thinking Tokens slider for reasoning models - Users now use the Max Output Tokens field in Advanced Settings for all models - Updated tests to reflect the removal of the second slider - Removed unused 'maxTokens' translation from all language files - This resolves the conflict between the two controls for reasoning models
1 parent e6cc00b commit 3a527b7

File tree

20 files changed

+20
-74
lines changed

20 files changed

+20
-74
lines changed

webview-ui/src/components/settings/ThinkingBudget.tsx

Lines changed: 12 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -59,38 +59,19 @@ export const ThinkingBudget = ({ apiConfiguration, setApiConfigurationField, mod
5959
</div>
6060
)}
6161
{(isReasoningBudgetRequired || enableReasoningEffort) && (
62-
<>
63-
<div className="flex flex-col gap-1">
64-
<div className="font-medium">{t("settings:thinkingBudget.maxTokens")}</div>
65-
<div className="flex items-center gap-1">
66-
<Slider
67-
min={8192}
68-
max={Math.max(
69-
modelInfo.maxTokens || 8192,
70-
customMaxOutputTokens,
71-
DEFAULT_HYBRID_REASONING_MODEL_MAX_TOKENS,
72-
)}
73-
step={1024}
74-
value={[customMaxOutputTokens]}
75-
onValueChange={([value]) => setApiConfigurationField("modelMaxTokens", value)}
76-
/>
77-
<div className="w-12 text-sm text-center">{customMaxOutputTokens}</div>
78-
</div>
79-
</div>
80-
<div className="flex flex-col gap-1">
81-
<div className="font-medium">{t("settings:thinkingBudget.maxThinkingTokens")}</div>
82-
<div className="flex items-center gap-1" data-testid="reasoning-budget">
83-
<Slider
84-
min={1024}
85-
max={modelMaxThinkingTokens}
86-
step={1024}
87-
value={[customMaxThinkingTokens]}
88-
onValueChange={([value]) => setApiConfigurationField("modelMaxThinkingTokens", value)}
89-
/>
90-
<div className="w-12 text-sm text-center">{customMaxThinkingTokens}</div>
91-
</div>
62+
<div className="flex flex-col gap-1">
63+
<div className="font-medium">{t("settings:thinkingBudget.maxThinkingTokens")}</div>
64+
<div className="flex items-center gap-1" data-testid="reasoning-budget">
65+
<Slider
66+
min={1024}
67+
max={modelMaxThinkingTokens}
68+
step={1024}
69+
value={[customMaxThinkingTokens]}
70+
onValueChange={([value]) => setApiConfigurationField("modelMaxThinkingTokens", value)}
71+
/>
72+
<div className="w-12 text-sm text-center">{customMaxThinkingTokens}</div>
9273
</div>
93-
</>
74+
</div>
9475
)}
9576
</>
9677
) : isReasoningEffortSupported ? (

webview-ui/src/components/settings/__tests__/ThinkingBudget.spec.tsx

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,10 @@ describe("ThinkingBudget", () => {
5757
expect(container.firstChild).toBeNull()
5858
})
5959

60-
it("should render sliders when model supports thinking", () => {
60+
it("should render slider when model supports thinking", () => {
6161
render(<ThinkingBudget {...defaultProps} />)
6262

63-
expect(screen.getAllByTestId("slider")).toHaveLength(2)
63+
expect(screen.getAllByTestId("slider")).toHaveLength(1)
6464
})
6565

6666
it("should update modelMaxThinkingTokens", () => {
@@ -74,8 +74,8 @@ describe("ThinkingBudget", () => {
7474
/>,
7575
)
7676

77-
const sliders = screen.getAllByTestId("slider")
78-
fireEvent.change(sliders[1], { target: { value: "5000" } })
77+
const slider = screen.getByTestId("slider")
78+
fireEvent.change(slider, { target: { value: "5000" } })
7979

8080
expect(setApiConfigurationField).toHaveBeenCalledWith("modelMaxThinkingTokens", 5000)
8181
})
@@ -99,31 +99,14 @@ describe("ThinkingBudget", () => {
9999
render(<ThinkingBudget {...defaultProps} apiConfiguration={{ modelMaxTokens: 10000 }} />)
100100

101101
// Default is 80% of max tokens, capped at 8192
102-
const sliders = screen.getAllByTestId("slider")
103-
expect(sliders[1]).toHaveValue("8000") // 80% of 10000
102+
const slider = screen.getByTestId("slider")
103+
expect(slider).toHaveValue("8000") // 80% of 10000
104104
})
105105

106106
it("should use min thinking tokens of 1024", () => {
107107
render(<ThinkingBudget {...defaultProps} apiConfiguration={{ modelMaxTokens: 1000 }} />)
108108

109-
const sliders = screen.getAllByTestId("slider")
110-
expect(sliders[1].getAttribute("min")).toBe("1024")
111-
})
112-
113-
it("should update max tokens when slider changes", () => {
114-
const setApiConfigurationField = vi.fn()
115-
116-
render(
117-
<ThinkingBudget
118-
{...defaultProps}
119-
apiConfiguration={{ modelMaxTokens: 10000 }}
120-
setApiConfigurationField={setApiConfigurationField}
121-
/>,
122-
)
123-
124-
const sliders = screen.getAllByTestId("slider")
125-
fireEvent.change(sliders[0], { target: { value: "12000" } })
126-
127-
expect(setApiConfigurationField).toHaveBeenCalledWith("modelMaxTokens", 12000)
109+
const slider = screen.getByTestId("slider")
110+
expect(slider.getAttribute("min")).toBe("1024")
128111
})
129112
})

webview-ui/src/i18n/locales/ca/settings.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,6 @@
663663
}
664664
},
665665
"thinkingBudget": {
666-
"maxTokens": "Tokens màxims",
667666
"maxThinkingTokens": "Tokens de pensament màxims"
668667
},
669668
"validation": {

webview-ui/src/i18n/locales/de/settings.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,6 @@
663663
}
664664
},
665665
"thinkingBudget": {
666-
"maxTokens": "Max Tokens",
667666
"maxThinkingTokens": "Max Thinking Tokens"
668667
},
669668
"validation": {

webview-ui/src/i18n/locales/en/settings.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,6 @@
663663
}
664664
},
665665
"thinkingBudget": {
666-
"maxTokens": "Max Tokens",
667666
"maxThinkingTokens": "Max Thinking Tokens"
668667
},
669668
"validation": {

webview-ui/src/i18n/locales/es/settings.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,6 @@
663663
}
664664
},
665665
"thinkingBudget": {
666-
"maxTokens": "Tokens máximos",
667666
"maxThinkingTokens": "Tokens máximos de pensamiento"
668667
},
669668
"validation": {

webview-ui/src/i18n/locales/fr/settings.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,6 @@
663663
}
664664
},
665665
"thinkingBudget": {
666-
"maxTokens": "Tokens maximum",
667666
"maxThinkingTokens": "Tokens de réflexion maximum"
668667
},
669668
"validation": {

webview-ui/src/i18n/locales/hi/settings.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,6 @@
663663
}
664664
},
665665
"thinkingBudget": {
666-
"maxTokens": "अधिकतम tokens",
667666
"maxThinkingTokens": "अधिकतम thinking tokens"
668667
},
669668
"validation": {

webview-ui/src/i18n/locales/id/settings.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -692,7 +692,6 @@
692692
}
693693
},
694694
"thinkingBudget": {
695-
"maxTokens": "Token Maksimum",
696695
"maxThinkingTokens": "Token Thinking Maksimum"
697696
},
698697
"validation": {

webview-ui/src/i18n/locales/it/settings.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,6 @@
663663
}
664664
},
665665
"thinkingBudget": {
666-
"maxTokens": "Token massimi",
667666
"maxThinkingTokens": "Token massimi di pensiero"
668667
},
669668
"validation": {

0 commit comments

Comments
 (0)