Added dynamic openrouter model list
Browse files- 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 |
-
|
|
|
|
|
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 |
-
|
|
|
206 |
MODEL_LIST = [...(await Promise.all(
|
207 |
PROVIDER_LIST.filter(p => !!p.getDynamicModels).map(p => p.getDynamicModels()))).flat(), ...staticModels];
|
|
|
208 |
}
|
209 |
|
210 |
-
initializeModelList
|
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 };
|
|