Eduards commited on
Commit
feb1950
·
1 Parent(s): c575ee3

Added dynamic openrouter model list

Browse files
Files changed (1) hide show
  1. app/utils/constants.ts +34 -4
app/utils/constants.ts CHANGED
@@ -60,7 +60,9 @@ const PROVIDER_LIST: ProviderInfo[] = [
60
  { name: 'qwen/qwen-110b-chat', label: 'OpenRouter Qwen 110b Chat (OpenRouter)', provider: 'OpenRouter' },
61
  { name: 'cohere/command', label: 'Cohere Command (OpenRouter)', provider: 'OpenRouter' }
62
  ],
63
- getApiKeyLink: 'https://openrouter.ai/settings/keys'
 
 
64
  }, {
65
  name: 'Google',
66
  staticModels: [
@@ -183,7 +185,34 @@ async function getOpenAILikeModels(): Promise<ModelInfo[]> {
183
  } catch (e) {
184
  return [];
185
  }
 
186
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
187
  }
188
 
189
  async function getLMStudioModels(): Promise<ModelInfo[]> {
@@ -202,10 +231,11 @@ async function getLMStudioModels(): Promise<ModelInfo[]> {
202
  }
203
 
204
 
205
- async function initializeModelList(): Promise<void> {
 
206
  MODEL_LIST = [...(await Promise.all(
207
  PROVIDER_LIST.filter(p => !!p.getDynamicModels).map(p => p.getDynamicModels()))).flat(), ...staticModels];
 
208
  }
209
 
210
- initializeModelList().then();
211
- export { getOllamaModels, getOpenAILikeModels, getLMStudioModels, initializeModelList, PROVIDER_LIST };
 
60
  { name: 'qwen/qwen-110b-chat', label: 'OpenRouter Qwen 110b Chat (OpenRouter)', provider: 'OpenRouter' },
61
  { name: 'cohere/command', label: 'Cohere Command (OpenRouter)', provider: 'OpenRouter' }
62
  ],
63
+ getDynamicModels: getOpenRouterModels,
64
+ getApiKeyLink: 'https://openrouter.ai/settings/keys',
65
+
66
  }, {
67
  name: 'Google',
68
  staticModels: [
 
185
  } catch (e) {
186
  return [];
187
  }
188
+ }
189
 
190
+ type OpenRouterModelsResponse = {
191
+ data: {
192
+ name: string;
193
+ id: string;
194
+ context_length: number;
195
+ pricing: {
196
+ prompt: number;
197
+ completion: number;
198
+ }
199
+ }[]
200
+ };
201
+
202
+ async function getOpenRouterModels(): Promise<ModelInfo[]> {
203
+ const data: OpenRouterModelsResponse = await (await fetch('https://openrouter.ai/api/v1/models', {
204
+ headers: {
205
+ 'Content-Type': 'application/json'
206
+ }
207
+ })).json();
208
+
209
+ return data.data.sort((a, b) => a.name.localeCompare(b.name)).map(m => ({
210
+ name: m.id,
211
+ label: `${m.name} - in:$${(m.pricing.prompt * 1_000_000).toFixed(
212
+ 2)} out:$${(m.pricing.completion * 1_000_000).toFixed(2)} - context ${Math.floor(
213
+ m.context_length / 1000)}k`,
214
+ provider: 'OpenRouter'
215
+ }));
216
  }
217
 
218
  async function getLMStudioModels(): Promise<ModelInfo[]> {
 
231
  }
232
 
233
 
234
+
235
+ async function initializeModelList(): Promise<ModelInfo[]> {
236
  MODEL_LIST = [...(await Promise.all(
237
  PROVIDER_LIST.filter(p => !!p.getDynamicModels).map(p => p.getDynamicModels()))).flat(), ...staticModels];
238
+ return MODEL_LIST;
239
  }
240
 
241
+ export { getOllamaModels, getOpenAILikeModels, getLMStudioModels, initializeModelList, getOpenRouterModels, PROVIDER_LIST };