import { VSCodeCheckbox } from "@vscode/webview-ui-toolkit/react" import { useEffect, useState } from "react" interface TemperatureControlProps { value: number | undefined onChange: (value: number | undefined) => void maxValue?: number // Some providers like OpenAI use 0-2 range } export const TemperatureControl = ({ value, onChange, maxValue = 1 }: TemperatureControlProps) => { const [isCustomTemperature, setIsCustomTemperature] = useState(value !== undefined) const [inputValue, setInputValue] = useState(value?.toString() ?? "0") // Sync internal state with prop changes when switching profiles useEffect(() => { const hasCustomTemperature = value !== undefined setIsCustomTemperature(hasCustomTemperature) setInputValue(value?.toString() ?? "0") }, [value]) return (
{ const isChecked = e.target.checked setIsCustomTemperature(isChecked) if (!isChecked) { onChange(undefined) // Unset the temperature } else if (value !== undefined) { onChange(value) // Use the value from apiConfiguration, if set } }}> Use custom temperature

Controls randomness in the model's responses.

{isCustomTemperature && (
setInputValue(e.target.value)} onBlur={(e) => { const newValue = parseFloat(e.target.value) if (!isNaN(newValue) && newValue >= 0 && newValue <= maxValue) { onChange(newValue) setInputValue(newValue.toString()) } else { setInputValue(value?.toString() ?? "0") // Reset to last valid value } }} style={{ width: "60px", padding: "4px 8px", border: "1px solid var(--vscode-input-border)", background: "var(--vscode-input-background)", color: "var(--vscode-input-foreground)", }} />

Higher values make output more random, lower values make it more deterministic.

)}
) }