Skip to content

Commit e106947

Browse files
committed
fix: resolve provider switching issues and model display problems
🔧 Provider Switching Fixes: - Fix useSelectedModel hook with React useMemo for proper dependency management - Resolve Gemini and static providers model display issues when switching - Optimize apiModelId update logic to only apply to static providers - Ensure correct model values are displayed when switching between API providers 🚀 Performance Improvements: - Improve provider switching responsiveness - Fix React Hook dependency warnings in useSelectedModel Based on upstream v3.18.3 with proper Git merge
1 parent 8da9858 commit e106947

File tree

2 files changed

+49
-9
lines changed

2 files changed

+49
-9
lines changed

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

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,32 @@ const ApiOptions = ({
125125
const { data: routerModels, refetch: refetchRouterModels } = useRouterModels()
126126

127127
// Update `apiModelId` whenever `selectedModelId` changes.
128+
// Only for static providers that use apiModelId field.
128129
useEffect(() => {
129-
if (selectedModelId) {
130-
setApiConfigurationField("apiModelId", selectedModelId)
130+
if (selectedModelId && selectedProvider) {
131+
// Only update apiModelId for static providers, not router providers
132+
const staticProviders = [
133+
"gemini",
134+
"anthropic",
135+
"openai-native",
136+
"bedrock",
137+
"vertex",
138+
"deepseek",
139+
"mistral",
140+
"xai",
141+
"groq",
142+
"chutes",
143+
]
144+
145+
if (staticProviders.includes(selectedProvider)) {
146+
// Only update if the current apiModelId is different from selectedModelId
147+
// This prevents overwriting user-saved values during provider switching
148+
if (apiConfiguration.apiModelId !== selectedModelId) {
149+
setApiConfigurationField("apiModelId", selectedModelId)
150+
}
151+
}
131152
}
132-
}, [selectedModelId, setApiConfigurationField])
153+
}, [selectedModelId, selectedProvider, apiConfiguration.apiModelId, setApiConfigurationField])
133154

134155
// Debounced refresh model updates, only executed 250ms after the user
135156
// stops typing.
@@ -226,6 +247,8 @@ const ApiOptions = ({
226247
}
227248
break
228249
}
250+
// Handle static providers that use apiModelId
251+
// Don't modify apiModelId during provider switching - let useSelectedModel handle it
229252

230253
setApiConfigurationField("apiProvider", value)
231254
},

webview-ui/src/components/ui/hooks/useSelectedModel.ts

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { useMemo } from "react"
12
import {
23
type ProviderName,
34
type ProviderSettings,
@@ -43,17 +44,33 @@ export const useSelectedModel = (apiConfiguration?: ProviderSettings) => {
4344
const routerModels = useRouterModels()
4445
const openRouterModelProviders = useOpenRouterModelProviders(openRouterModelId)
4546

46-
const { id, info } =
47-
apiConfiguration &&
48-
typeof routerModels.data !== "undefined" &&
49-
typeof openRouterModelProviders.data !== "undefined"
47+
// Create a default empty router models structure
48+
const emptyRouterModels: RouterModels = useMemo(
49+
() => ({
50+
openrouter: {},
51+
requesty: {},
52+
glama: {},
53+
unbound: {},
54+
litellm: {},
55+
}),
56+
[],
57+
)
58+
59+
const { id, info } = useMemo(() => {
60+
return apiConfiguration && routerModels.data && openRouterModelProviders.data
5061
? getSelectedModel({
5162
provider,
5263
apiConfiguration,
53-
routerModels: routerModels.data,
64+
routerModels: (routerModels.data as RouterModels) || emptyRouterModels,
5465
openRouterModelProviders: openRouterModelProviders.data,
5566
})
56-
: { id: anthropicDefaultModelId, info: undefined }
67+
: getSelectedModel({
68+
provider,
69+
apiConfiguration: apiConfiguration || {},
70+
routerModels: emptyRouterModels,
71+
openRouterModelProviders: {},
72+
})
73+
}, [provider, apiConfiguration, routerModels.data, openRouterModelProviders.data, emptyRouterModels])
5774

5875
return {
5976
provider,

0 commit comments

Comments
 (0)