Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 21 additions & 7 deletions webview-ui/src/components/settings/ApiOptions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { ExternalLinkIcon } from "@radix-ui/react-icons"
import {
type ProviderName,
type ProviderSettings,
type ModelInfo,
DEFAULT_CONSECUTIVE_MISTAKE_LIMIT,
openRouterDefaultModelId,
requestyDefaultModelId,
Expand Down Expand Up @@ -173,6 +174,9 @@ const ApiOptions = ({
const [isDescriptionExpanded, setIsDescriptionExpanded] = useState(false)
const [isAdvancedSettingsOpen, setIsAdvancedSettingsOpen] = useState(false)

// Simple cache to prevent flicker during settings save
const [lastKnownModelInfo, setLastKnownModelInfo] = useState<ModelInfo | undefined>()

const handleInputChange = useCallback(
<K extends keyof ProviderSettings, E>(
field: K,
Expand All @@ -190,6 +194,16 @@ const ApiOptions = ({
info: selectedModelInfo,
} = useSelectedModel(apiConfiguration)

// Update cache whenever selectedModelInfo is available
useEffect(() => {
if (selectedModelInfo) {
setLastKnownModelInfo(selectedModelInfo)
}
}, [selectedModelInfo])

// Use cached info as fallback when selectedModelInfo is temporarily unavailable
const displayModelInfo = selectedModelInfo || lastKnownModelInfo

const { data: routerModels, refetch: refetchRouterModels } = useRouterModels()

const { data: openRouterModelProviders } = useOpenRouterModelProviders(apiConfiguration?.openRouterModelId, {
Expand Down Expand Up @@ -749,11 +763,11 @@ const ApiOptions = ({
)}

{/* Only show model info if not deprecated */}
{!selectedModelInfo?.deprecated && (
{!displayModelInfo?.deprecated && (
<ModelInfoView
apiProvider={selectedProvider}
selectedModelId={selectedModelId}
modelInfo={selectedModelInfo}
modelInfo={displayModelInfo}
isDescriptionExpanded={isDescriptionExpanded}
setIsDescriptionExpanded={setIsDescriptionExpanded}
/>
Expand All @@ -773,16 +787,16 @@ const ApiOptions = ({
key={`${selectedProvider}-${selectedModelId}`}
apiConfiguration={apiConfiguration}
setApiConfigurationField={setApiConfigurationField}
modelInfo={selectedModelInfo}
modelInfo={displayModelInfo}
/>
)}

{/* Gate Verbosity UI by capability flag */}
{selectedModelInfo?.supportsVerbosity && (
{displayModelInfo?.supportsVerbosity && (
<Verbosity
apiConfiguration={apiConfiguration}
setApiConfigurationField={setApiConfigurationField}
modelInfo={selectedModelInfo}
modelInfo={displayModelInfo}
/>
)}

Expand All @@ -802,12 +816,12 @@ const ApiOptions = ({
fuzzyMatchThreshold={apiConfiguration.fuzzyMatchThreshold}
onChange={(field, value) => setApiConfigurationField(field, value)}
/>
{selectedModelInfo?.supportsTemperature !== false && (
{displayModelInfo?.supportsTemperature !== false && (
<TemperatureControl
value={apiConfiguration.modelTemperature}
onChange={handleInputChange("modelTemperature", noTransform)}
maxValue={2}
defaultValue={selectedModelInfo?.defaultTemperature}
defaultValue={displayModelInfo?.defaultTemperature}
/>
)}
<RateLimitSecondsControl
Expand Down
Loading