Fix: Custom temperature cannot be unchecked

This commit is contained in:
System233 2025-03-08 05:31:39 +08:00
parent fd4d52fb1f
commit 9ceccdec32
3 changed files with 7 additions and 7 deletions

View file

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

View file

@ -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))}
/>

View file

@ -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)