@@ -67,30 +67,56 @@ import { useOpenRouterModelProviders } from "./useOpenRouterModelProviders"
6767import { useLmStudioModels } from "./useLmStudioModels"
6868import { useOllamaModels } from "./useOllamaModels"
6969
70+ const DYNAMIC_ROUTER_PROVIDERS = new Set < ProviderName > ( [
71+ "openrouter" ,
72+ "vercel-ai-gateway" ,
73+ "litellm" ,
74+ "deepinfra" ,
75+ "io-intelligence" ,
76+ "requesty" ,
77+ "unbound" ,
78+ "glama" ,
79+ "roo" ,
80+ ] )
81+
7082export const useSelectedModel = ( apiConfiguration ?: ProviderSettings ) => {
7183 const provider = apiConfiguration ?. apiProvider || "anthropic"
7284 const openRouterModelId = provider === "openrouter" ? apiConfiguration ?. openRouterModelId : undefined
7385 const lmStudioModelId = provider === "lmstudio" ? apiConfiguration ?. lmStudioModelId : undefined
7486 const ollamaModelId = provider === "ollama" ? apiConfiguration ?. ollamaModelId : undefined
7587
76- const routerModels = useRouterModels ( )
88+ // Only fetch router models for dynamic router providers we actually need
89+ const shouldFetchRouterModels = DYNAMIC_ROUTER_PROVIDERS . has ( provider as ProviderName )
90+ const routerModels = useRouterModels ( {
91+ providers : shouldFetchRouterModels ? [ provider ] : undefined ,
92+ enabled : shouldFetchRouterModels , // disable entirely for static providers
93+ } )
94+
7795 const openRouterModelProviders = useOpenRouterModelProviders ( openRouterModelId )
7896 const lmStudioModels = useLmStudioModels ( lmStudioModelId )
7997 const ollamaModels = useOllamaModels ( ollamaModelId )
8098
99+ // Compute readiness only for the data actually needed for the selected provider
100+ const needRouterModels = shouldFetchRouterModels
101+ const needOpenRouterProviders = provider === "openrouter"
102+ const needLmStudio = typeof lmStudioModelId !== "undefined"
103+ const needOllama = typeof ollamaModelId !== "undefined"
104+
105+ const isReady =
106+ ( ! needLmStudio || typeof lmStudioModels . data !== "undefined" ) &&
107+ ( ! needOllama || typeof ollamaModels . data !== "undefined" ) &&
108+ ( ! needRouterModels || typeof routerModels . data !== "undefined" ) &&
109+ ( ! needOpenRouterProviders || typeof openRouterModelProviders . data !== "undefined" )
110+
81111 const { id, info } =
82- apiConfiguration &&
83- ( typeof lmStudioModelId === "undefined" || typeof lmStudioModels . data !== "undefined" ) &&
84- ( typeof ollamaModelId === "undefined" || typeof ollamaModels . data !== "undefined" ) &&
85- typeof routerModels . data !== "undefined" &&
86- typeof openRouterModelProviders . data !== "undefined"
112+ apiConfiguration && isReady
87113 ? getSelectedModel ( {
88114 provider,
89115 apiConfiguration,
90- routerModels : routerModels . data ,
91- openRouterModelProviders : openRouterModelProviders . data ,
92- lmStudioModels : lmStudioModels . data ,
93- ollamaModels : ollamaModels . data ,
116+ routerModels : ( routerModels . data || ( { } as RouterModels ) ) as RouterModels ,
117+ openRouterModelProviders : ( openRouterModelProviders . data || { } ) as Record < string , ModelInfo > ,
118+ lmStudioModels : ( lmStudioModels . data || undefined ) as ModelRecord | undefined ,
119+ ollamaModels : ( ollamaModels . data || undefined ) as ModelRecord | undefined ,
94120 } )
95121 : { id : anthropicDefaultModelId , info : undefined }
96122
@@ -99,13 +125,15 @@ export const useSelectedModel = (apiConfiguration?: ProviderSettings) => {
99125 id,
100126 info,
101127 isLoading :
102- routerModels . isLoading ||
103- openRouterModelProviders . isLoading ||
104- ( apiConfiguration ?. lmStudioModelId && lmStudioModels ! . isLoading ) ,
128+ ( needRouterModels && routerModels . isLoading ) ||
129+ ( needOpenRouterProviders && openRouterModelProviders . isLoading ) ||
130+ ( needLmStudio && lmStudioModels ! . isLoading ) ||
131+ ( needOllama && ollamaModels ! . isLoading ) ,
105132 isError :
106- routerModels . isError ||
107- openRouterModelProviders . isError ||
108- ( apiConfiguration ?. lmStudioModelId && lmStudioModels ! . isError ) ,
133+ ( needRouterModels && routerModels . isError ) ||
134+ ( needOpenRouterProviders && openRouterModelProviders . isError ) ||
135+ ( needLmStudio && lmStudioModels ! . isError ) ||
136+ ( needOllama && ollamaModels ! . isError ) ,
109137 }
110138}
111139
0 commit comments