Просмотр исходного кода

Merge pull request #1468 from System233/patch-custom-temperature

Fix: Custom temperature cannot be unchecked
Matt Rubens 10 месяцев назад
Родитель
Сommit
ea9191610f

+ 1 - 1
src/shared/api.ts

@@ -70,7 +70,7 @@ export interface ApiHandlerOptions {
 	requestyApiKey?: string
 	requestyModelId?: string
 	requestyModelInfo?: ModelInfo
-	modelTemperature?: number
+	modelTemperature?: number | null
 	modelMaxTokens?: number
 	modelMaxThinkingTokens?: number
 }

+ 5 - 5
webview-ui/src/components/settings/TemperatureControl.tsx

@@ -3,8 +3,8 @@ import { useEffect, useState } from "react"
 import { useDebounce } from "react-use"
 
 interface TemperatureControlProps {
-	value: number | undefined
-	onChange: (value: number | undefined) => void
+	value: number | undefined | null
+	onChange: (value: number | undefined | null) => void
 	maxValue?: number // Some providers like OpenAI use 0-2 range
 }
 
@@ -14,7 +14,7 @@ export const TemperatureControl = ({ value, onChange, maxValue = 1 }: Temperatur
 	useDebounce(() => onChange(inputValue), 50, [onChange, inputValue])
 	// Sync internal state with prop changes when switching profiles
 	useEffect(() => {
-		const hasCustomTemperature = value !== undefined
+		const hasCustomTemperature = value !== undefined && value !== null
 		setIsCustomTemperature(hasCustomTemperature)
 		setInputValue(value)
 	}, [value])
@@ -28,7 +28,7 @@ export const TemperatureControl = ({ value, onChange, maxValue = 1 }: Temperatur
 						const isChecked = e.target.checked
 						setIsCustomTemperature(isChecked)
 						if (!isChecked) {
-							setInputValue(undefined) // Unset the temperature
+							setInputValue(null) // Unset the temperature, note that undefined is unserializable
 						} else {
 							setInputValue(value ?? 0) // Use the value from apiConfiguration, if set
 						}
@@ -53,7 +53,7 @@ export const TemperatureControl = ({ value, onChange, maxValue = 1 }: Temperatur
 							min="0"
 							max={maxValue}
 							step="0.01"
-							value={inputValue}
+							value={inputValue ?? 0}
 							className="h-2 focus:outline-0 w-4/5 accent-vscode-button-background"
 							onChange={(e) => setInputValue(parseFloat(e.target.value))}
 						/>

+ 1 - 1
webview-ui/src/components/settings/__tests__/TemperatureControl.test.tsx

@@ -33,7 +33,7 @@ describe("TemperatureControl", () => {
 		fireEvent.click(checkbox)
 		// Waiting for debounce
 		await new Promise((x) => setTimeout(x, 100))
-		expect(onChange).toHaveBeenCalledWith(undefined)
+		expect(onChange).toHaveBeenCalledWith(null)
 
 		// Check - should restore previous temperature
 		fireEvent.click(checkbox)