import { getBundledModels, getBundledProviders } from "../models"; import type { Api, Model } from "../types"; export function createBundledReferenceMap( provider: Parameters[0], ): Map> { const references = new Map>(); for (const model of getBundledModels(provider)) { references.set(model.id, model as Model); } return references; } export function createReferenceResolver( providerRefs: Map>, ): (modelId: string) => Model | undefined { const globalRefs = new Map>(); for (const provider of getBundledProviders()) { for (const model of getBundledModels(provider as Parameters[0])) { const candidate = model as Model; const existing = globalRefs.get(candidate.id); if (!existing) { globalRefs.set(candidate.id, candidate); } else if (candidate.contextWindow !== existing.contextWindow) { if (candidate.contextWindow > existing.contextWindow) { globalRefs.set(candidate.id, candidate); } } else if (candidate.maxTokens !== existing.maxTokens) { if (candidate.maxTokens > existing.maxTokens) { globalRefs.set(candidate.id, candidate); } } else if (existing.provider !== "openai" && candidate.provider === "openai") { globalRefs.set(candidate.id, candidate); } } } return (modelId: string) => providerRefs.get(modelId) ?? (globalRefs.get(modelId) as Model | undefined); }