@@ -53,22 +53,6 @@ import { validateApiConfiguration, validateModelId } from "@/utils/validate"
5353import { ApiErrorMessage } from "./ApiErrorMessage"
5454import { ThinkingBudget } from "./ThinkingBudget"
5555
56- const modelsByProvider : Record < string , Record < string , ModelInfo > > = {
57- anthropic : anthropicModels ,
58- bedrock : bedrockModels ,
59- vertex : vertexModels ,
60- gemini : geminiModels ,
61- "openai-native" : openAiNativeModels ,
62- deepseek : deepSeekModels ,
63- mistral : mistralModels ,
64- pearai : pearAiModels ,
65- }
66-
67- console . dir ( "IM HERE888" )
68- console . dir ( pearAiModels )
69- console . dir ( "IM HERE9999" )
70- console . dir ( anthropicModels )
71-
7256interface ApiOptionsProps {
7357 uriScheme : string | undefined
7458 apiConfiguration : ApiConfiguration
@@ -106,6 +90,8 @@ const ApiOptions = ({
10690 [ requestyDefaultModelId ] : requestyDefaultModelInfo ,
10791 } )
10892
93+ const [ pearAiModelsState , setPearAiModelsState ] = useState < Record < string , ModelInfo > > ( pearAiModels )
94+
10995 const [ openAiModels , setOpenAiModels ] = useState < Record < string , ModelInfo > | null > ( null )
11096
11197 const [ anthropicBaseUrlSelected , setAnthropicBaseUrlSelected ] = useState ( ! ! apiConfiguration ?. anthropicBaseUrl )
@@ -130,8 +116,8 @@ const ApiOptions = ({
130116 )
131117
132118 const { selectedProvider, selectedModelId, selectedModelInfo } = useMemo (
133- ( ) => normalizeApiConfiguration ( apiConfiguration ) ,
134- [ apiConfiguration ] ,
119+ ( ) => normalizeApiConfiguration ( apiConfiguration , pearAiModelsState ) ,
120+ [ apiConfiguration , pearAiModelsState ] ,
135121 )
136122
137123 // Debounced refresh model updates, only executed 250ms after the user
@@ -228,11 +214,63 @@ const ApiOptions = ({
228214 setVsCodeLmModels ( newModels )
229215 }
230216 break
217+ case "state" :
218+ if ( message . state ?. apiConfiguration ?. pearaiApiKey ) {
219+ setPearAiModelsState ( pearAiModels )
220+ }
221+ break
231222 }
232223 } , [ ] )
233224
225+ // Update PearAI models when API key changes
226+ useEffect ( ( ) => {
227+ if ( apiConfiguration ?. pearaiApiKey ) {
228+ setPearAiModelsState ( pearAiModels )
229+ }
230+ } , [ apiConfiguration ?. pearaiApiKey ] )
231+
234232 useEvent ( "message" , onMessage )
235233
234+ type ApiProvider =
235+ | "anthropic"
236+ | "bedrock"
237+ | "vertex"
238+ | "gemini"
239+ | "openai-native"
240+ | "deepseek"
241+ | "mistral"
242+ | "pearai"
243+ | "openrouter"
244+ | "glama"
245+ | "unbound"
246+ | "requesty"
247+ | "openai"
248+ | "ollama"
249+ | "lmstudio"
250+ | "vscode-lm"
251+
252+ const modelsByProvider = useMemo < Record < ApiProvider , Record < string , ModelInfo > > > (
253+ ( ) => ( {
254+ anthropic : anthropicModels ,
255+ bedrock : bedrockModels ,
256+ vertex : vertexModels ,
257+ gemini : geminiModels ,
258+ "openai-native" : openAiNativeModels ,
259+ deepseek : deepSeekModels ,
260+ mistral : mistralModels ,
261+ pearai : pearAiModelsState ,
262+ openrouter : openRouterModels ,
263+ glama : glamaModels ,
264+ unbound : unboundModels ,
265+ requesty : requestyModels ,
266+ openai : openAiModels || { } ,
267+ ollama : { } ,
268+ lmstudio : { } ,
269+ "vscode-lm" : { } ,
270+ } ) ,
271+ [ pearAiModelsState , openRouterModels , glamaModels , unboundModels , requestyModels , openAiModels ] ,
272+ )
273+
236274 const selectedProviderModelOptions : DropdownOption [ ] = useMemo (
237275 ( ) =>
238276 modelsByProvider [ selectedProvider ]
@@ -244,7 +282,7 @@ const ApiOptions = ({
244282 } ) ) ,
245283 ]
246284 : [ ] ,
247- [ selectedProvider ] ,
285+ [ selectedProvider , modelsByProvider ] ,
248286 )
249287
250288 return (
@@ -1465,7 +1503,10 @@ export function getOpenRouterAuthUrl(uriScheme?: string) {
14651503 return `https://openrouter.ai/auth?callback_url=${ uriScheme || "vscode" } ://rooveterinaryinc.roo-cline/openrouter`
14661504}
14671505
1468- export function normalizeApiConfiguration ( apiConfiguration ?: ApiConfiguration ) {
1506+ export function normalizeApiConfiguration (
1507+ apiConfiguration ?: ApiConfiguration ,
1508+ pearAiModelsState ?: Record < string , ModelInfo > ,
1509+ ) {
14691510 const provider = apiConfiguration ?. apiProvider || "anthropic"
14701511 const modelId = apiConfiguration ?. apiModelId
14711512
@@ -1552,22 +1593,8 @@ export function normalizeApiConfiguration(apiConfiguration?: ApiConfiguration) {
15521593 supportsImages : false , // VSCode LM API currently doesn't support images.
15531594 } ,
15541595 }
1555- case "pearai" : {
1556- // Get the base Anthropic model info
1557- const baseModelInfo = anthropicModels [ anthropicDefaultModelId ]
1558- const pearaiModelInfo : ModelInfo = {
1559- ...baseModelInfo ,
1560- inputPrice : baseModelInfo . inputPrice ,
1561- outputPrice : baseModelInfo . outputPrice ,
1562- cacheWritesPrice : baseModelInfo . cacheWritesPrice ? baseModelInfo . cacheWritesPrice : undefined ,
1563- cacheReadsPrice : baseModelInfo . cacheWritesPrice ? baseModelInfo . cacheReadsPrice : undefined ,
1564- }
1565- return {
1566- selectedProvider : provider ,
1567- selectedModelId : apiConfiguration ?. pearaiModelId || "pearai_model" ,
1568- selectedModelInfo : pearaiModelInfo ,
1569- }
1570- }
1596+ case "pearai" :
1597+ return getProviderData ( pearAiModelsState || pearAiModels , pearAiDefaultModelId )
15711598 default :
15721599 return getProviderData ( anthropicModels , anthropicDefaultModelId )
15731600 }
0 commit comments