Added dynamic openrouter model list

This commit is contained in:
eduardruzga 2024-11-13 22:21:50 +02:00
parent c575ee316b
commit feb19509f6

View File

@ -60,7 +60,9 @@ const PROVIDER_LIST: ProviderInfo[] = [
{ name: 'qwen/qwen-110b-chat', label: 'OpenRouter Qwen 110b Chat (OpenRouter)', provider: 'OpenRouter' },
{ name: 'cohere/command', label: 'Cohere Command (OpenRouter)', provider: 'OpenRouter' }
],
getApiKeyLink: 'https://openrouter.ai/settings/keys'
getDynamicModels: getOpenRouterModels,
getApiKeyLink: 'https://openrouter.ai/settings/keys',
}, {
name: 'Google',
staticModels: [
@ -183,7 +185,34 @@ async function getOpenAILikeModels(): Promise<ModelInfo[]> {
} catch (e) {
return [];
}
}
type OpenRouterModelsResponse = {
data: {
name: string;
id: string;
context_length: number;
pricing: {
prompt: number;
completion: number;
}
}[]
};
async function getOpenRouterModels(): Promise<ModelInfo[]> {
const data: OpenRouterModelsResponse = await (await fetch('https://openrouter.ai/api/v1/models', {
headers: {
'Content-Type': 'application/json'
}
})).json();
return data.data.sort((a, b) => a.name.localeCompare(b.name)).map(m => ({
name: m.id,
label: `${m.name} - in:$${(m.pricing.prompt * 1_000_000).toFixed(
2)} out:$${(m.pricing.completion * 1_000_000).toFixed(2)} - context ${Math.floor(
m.context_length / 1000)}k`,
provider: 'OpenRouter'
}));
}
async function getLMStudioModels(): Promise<ModelInfo[]> {
@ -202,10 +231,11 @@ async function getLMStudioModels(): Promise<ModelInfo[]> {
}
async function initializeModelList(): Promise<void> {
async function initializeModelList(): Promise<ModelInfo[]> {
MODEL_LIST = [...(await Promise.all(
PROVIDER_LIST.filter(p => !!p.getDynamicModels).map(p => p.getDynamicModels()))).flat(), ...staticModels];
return MODEL_LIST;
}
initializeModelList().then();
export { getOllamaModels, getOpenAILikeModels, getLMStudioModels, initializeModelList, PROVIDER_LIST };
export { getOllamaModels, getOpenAILikeModels, getLMStudioModels, initializeModelList, getOpenRouterModels, PROVIDER_LIST };