@@ -18,32 +18,24 @@ import {
1818 minimaxModels ,
1919 friendliDefaultModelId ,
2020 friendliModels ,
21- deepSeekDefaultModelId ,
2221 openRouterDefaultModelId ,
2322 vscodeLlmModels ,
2423 vscodeLlmDefaultModelId ,
2524 moonshotDefaultModelId ,
2625 moonshotModels ,
2726 kimiCodeDefaultModelInfo ,
2827 providerIdentifiers ,
29- retiredProviderIdentifiers ,
3028} from "@roo-code/types"
3129
3230import { useSelectedModel } from "../useSelectedModel"
3331import { useRouterModels } from "../useRouterModels"
3432import { useOpenRouterModelProviders } from "../useOpenRouterModelProviders"
35- import { useLmStudioModels } from "../useLmStudioModels"
36- import { useOllamaModels } from "../useOllamaModels"
3733
3834vi . mock ( "../useRouterModels" )
3935vi . mock ( "../useOpenRouterModelProviders" )
40- vi . mock ( "../useLmStudioModels" )
41- vi . mock ( "../useOllamaModels" )
4236
4337const mockUseRouterModels = useRouterModels as Mock < typeof useRouterModels >
4438const mockUseOpenRouterModelProviders = useOpenRouterModelProviders as Mock < typeof useOpenRouterModelProviders >
45- const mockUseLmStudioModels = useLmStudioModels as Mock < typeof useLmStudioModels >
46- const mockUseOllamaModels = useOllamaModels as Mock < typeof useOllamaModels >
4739
4840const createWrapper = ( ) => {
4941 const queryClient = new QueryClient ( {
@@ -58,146 +50,6 @@ const createWrapper = () => {
5850}
5951
6052describe ( "useSelectedModel" , ( ) => {
61- beforeEach ( ( ) => {
62- mockUseLmStudioModels . mockReturnValue ( { data : { } , isLoading : false , isError : false } as any )
63- mockUseOllamaModels . mockReturnValue ( { data : { } , isLoading : false , isError : false } as any )
64- } )
65-
66- const dynamicProviderCases = [
67- [ providerIdentifiers . requesty , "requestyModelId" ] ,
68- [ providerIdentifiers . unbound , "unboundModelId" ] ,
69- [ providerIdentifiers . vercelAiGateway , "vercelAiGatewayModelId" ] ,
70- [ providerIdentifiers . opencodeGo , "opencodeGoModelId" ] ,
71- [ providerIdentifiers . zooGateway , "zooGatewayModelId" ] ,
72- ] as const
73-
74- it . each ( dynamicProviderCases ) ( "uses router data for %s" , ( provider , modelIdKey ) => {
75- const modelInfo : ModelInfo = { contextWindow : 42_000 , supportsPromptCache : false }
76- mockUseRouterModels . mockReturnValue ( {
77- data : { [ provider ] : { model : modelInfo } } ,
78- isLoading : false ,
79- isError : false ,
80- } as any )
81- mockUseOpenRouterModelProviders . mockReturnValue ( { data : { } , isLoading : false , isError : false } as any )
82-
83- const apiConfiguration = {
84- apiProvider : provider ,
85- [ modelIdKey ] : "model" ,
86- } as ProviderSettings
87- const { result } = renderHook ( ( ) => useSelectedModel ( apiConfiguration ) , { wrapper : createWrapper ( ) } )
88-
89- expect ( result . current . id ) . toBe ( "model" )
90- expect ( result . current . info ) . toEqual ( modelInfo )
91- } )
92-
93- it . each ( [
94- [ providerIdentifiers . lmstudio , "lmStudioModelId" ] ,
95- [ providerIdentifiers . ollama , "ollamaModelId" ] ,
96- ] as const ) ( "passes the configured model ID to the %s model hook" , ( provider , modelIdKey ) => {
97- mockUseRouterModels . mockReturnValue ( { data : { } , isLoading : false , isError : false } as any )
98- mockUseOpenRouterModelProviders . mockReturnValue ( { data : { } , isLoading : false , isError : false } as any )
99- mockUseLmStudioModels . mockReturnValue ( {
100- data : { "configured-model" : { } } ,
101- isLoading : false ,
102- isError : false ,
103- } as any )
104- mockUseOllamaModels . mockReturnValue ( {
105- data : { "configured-model" : { } } ,
106- isLoading : false ,
107- isError : false ,
108- } as any )
109-
110- const { result } = renderHook (
111- ( ) => useSelectedModel ( { apiProvider : provider , [ modelIdKey ] : "configured-model" } ) ,
112- { wrapper : createWrapper ( ) } ,
113- )
114-
115- expect ( result . current . id ) . toBe ( "configured-model" )
116- } )
117-
118- it ( "falls back to the OpenRouter default for a retired provider" , ( ) => {
119- mockUseRouterModels . mockReturnValue ( { data : { } , isLoading : false , isError : false } as any )
120- mockUseOpenRouterModelProviders . mockReturnValue ( { data : { } , isLoading : false , isError : false } as any )
121-
122- const { result } = renderHook ( ( ) => useSelectedModel ( { apiProvider : retiredProviderIdentifiers . cerebras } ) , {
123- wrapper : createWrapper ( ) ,
124- } )
125-
126- expect ( result . current . id ) . toBe ( openRouterDefaultModelId )
127- } )
128-
129- it ( "uses OpenCode Go default model information when the router catalog is empty" , ( ) => {
130- mockUseRouterModels . mockReturnValue ( {
131- data : { [ providerIdentifiers . opencodeGo ] : { } } ,
132- isLoading : false ,
133- isError : false ,
134- } as any )
135- mockUseOpenRouterModelProviders . mockReturnValue ( { data : { } , isLoading : false , isError : false } as any )
136-
137- const { result } = renderHook ( ( ) => useSelectedModel ( { apiProvider : providerIdentifiers . opencodeGo } ) , {
138- wrapper : createWrapper ( ) ,
139- } )
140-
141- expect ( result . current . info ) . toBeDefined ( )
142- } )
143-
144- it . each ( [ providerIdentifiers . deepseek , providerIdentifiers . moonshot ] ) (
145- "prefers router data over static data for %s" ,
146- ( provider ) => {
147- const modelInfo : ModelInfo = { contextWindow : 42_000 , supportsPromptCache : false }
148- const modelId = provider === providerIdentifiers . deepseek ? deepSeekDefaultModelId : moonshotDefaultModelId
149- mockUseRouterModels . mockReturnValue ( {
150- data : { [ provider ] : { [ modelId ] : modelInfo } } ,
151- isLoading : false ,
152- isError : false ,
153- } as any )
154- mockUseOpenRouterModelProviders . mockReturnValue ( { data : { } , isLoading : false , isError : false } as any )
155-
156- const { result } = renderHook ( ( ) => useSelectedModel ( { apiProvider : provider , apiModelId : modelId } ) , {
157- wrapper : createWrapper ( ) ,
158- } )
159-
160- expect ( result . current . info ) . toEqual ( modelInfo )
161- } ,
162- )
163-
164- it . each ( [ providerIdentifiers . deepseek , providerIdentifiers . moonshot ] ) (
165- "falls back to static data when the %s router catalog is null" ,
166- ( provider ) => {
167- const modelId = provider === providerIdentifiers . deepseek ? deepSeekDefaultModelId : moonshotDefaultModelId
168- mockUseRouterModels . mockReturnValue ( {
169- data : { [ provider ] : null } ,
170- isLoading : false ,
171- isError : false ,
172- } as any )
173- mockUseOpenRouterModelProviders . mockReturnValue ( { data : { } , isLoading : false , isError : false } as any )
174-
175- const { result } = renderHook ( ( ) => useSelectedModel ( { apiProvider : provider , apiModelId : modelId } ) , {
176- wrapper : createWrapper ( ) ,
177- } )
178-
179- expect ( result . current . id ) . toBe ( modelId )
180- expect ( result . current . info ) . toBeDefined ( )
181- } ,
182- )
183-
184- it ( "uses router data for Poe" , ( ) => {
185- const modelInfo : ModelInfo = { contextWindow : 42_000 , supportsPromptCache : false }
186- mockUseRouterModels . mockReturnValue ( {
187- data : { [ providerIdentifiers . poe ] : { model : modelInfo } } ,
188- isLoading : false ,
189- isError : false ,
190- } as any )
191- mockUseOpenRouterModelProviders . mockReturnValue ( { data : { } , isLoading : false , isError : false } as any )
192-
193- const { result } = renderHook (
194- ( ) => useSelectedModel ( { apiProvider : providerIdentifiers . poe , apiModelId : "model" } ) ,
195- { wrapper : createWrapper ( ) } ,
196- )
197-
198- expect ( result . current . info ) . toEqual ( modelInfo )
199- } )
200-
20153 describe ( "OpenRouter provider merging" , ( ) => {
20254 it ( "should merge base model info with specific provider info when both exist" , ( ) => {
20355 const baseModelInfo : ModelInfo = {
@@ -1229,25 +1081,6 @@ describe("useSelectedModel", () => {
12291081 } )
12301082
12311083 describe ( "Kimi Code provider" , ( ) => {
1232- it ( "should use the Kimi Code default while router models are loading and no model is configured" , ( ) => {
1233- mockUseRouterModels . mockReturnValue ( {
1234- data : undefined ,
1235- isLoading : true ,
1236- isError : false ,
1237- } as any )
1238-
1239- const apiConfiguration : ProviderSettings = {
1240- apiProvider : providerIdentifiers . kimiCode ,
1241- }
1242-
1243- const { result } = renderHook ( ( ) => useSelectedModel ( apiConfiguration ) , { wrapper : createWrapper ( ) } )
1244-
1245- expect ( result . current . provider ) . toBe ( providerIdentifiers . kimiCode )
1246- expect ( result . current . id ) . toBe ( "kimi-for-coding" )
1247- expect ( result . current . info ) . toEqual ( kimiCodeDefaultModelInfo )
1248- expect ( result . current . isLoading ) . toBe ( true )
1249- } )
1250-
12511084 it ( "should resolve the configured model from router models" , ( ) => {
12521085 const modelInfo : ModelInfo = {
12531086 ...kimiCodeDefaultModelInfo ,
0 commit comments