Spaces:
Runtime error
Runtime error
| import { customModelProvider } from "lib/ai/models"; | |
| let lastFetch = 0; | |
| const CACHE_TTL = 1000 * 60 * 60; // 1 hour | |
| async function fetchProviderModels( | |
| url: string, | |
| providerKey: string, | |
| headers: Record<string, string> = {}, | |
| transform: (data: any) => any[] = (data) => data.data || [] | |
| ) { | |
| try { | |
| const res = await fetch(url, { headers }); | |
| if (!res.ok) return; | |
| const data = await res.json(); | |
| const modelsList = transform(data); | |
| const providerEntry = customModelProvider.modelsInfo.find((p) => p.provider === providerKey); | |
| if (providerEntry) { | |
| const existingNames = new Set(providerEntry.models.map((m) => m.name)); | |
| for (const m of modelsList) { | |
| const id = m.id || m.name; | |
| if (id && !existingNames.has(id)) { | |
| providerEntry.models.push({ | |
| name: id, | |
| isToolCallUnsupported: false, | |
| isImageInputUnsupported: false, | |
| supportedFileMimeTypes: [], | |
| }); | |
| existingNames.add(id); | |
| } | |
| } | |
| } | |
| } catch (error) { | |
| console.error(`Failed to fetch models for ${providerKey}:`, error); | |
| } | |
| } | |
| export const GET = async () => { | |
| if (Date.now() - lastFetch > CACHE_TTL) { | |
| lastFetch = Date.now(); | |
| await Promise.allSettled([ | |
| fetchProviderModels("https://openrouter.ai/api/v1/models", "openRouter"), | |
| fetchProviderModels( | |
| "https://api.groq.com/openai/v1/models", | |
| "groq", | |
| process.env.GROQ_API_KEY ? { Authorization: `Bearer ${process.env.GROQ_API_KEY}` } : {} | |
| ), | |
| fetchProviderModels( | |
| "https://integrate.api.nvidia.com/v1/models", | |
| "nvidiaNim", | |
| process.env.NVIDIA_API_KEY ? { Authorization: `Bearer ${process.env.NVIDIA_API_KEY}` } : {} | |
| ), | |
| ]); | |
| } | |
| return Response.json( | |
| customModelProvider.modelsInfo.sort((a, b) => { | |
| if (a.hasAPIKey && !b.hasAPIKey) return -1; | |
| if (!a.hasAPIKey && b.hasAPIKey) return 1; | |
| return 0; | |
| }), | |
| ); | |
| }; | |