import { isZeroCostXaiOAuthReference } from "../identity/reference"; import { getBundledModels, getBundledProviders } from "../models"; import type { Api, Model, ModelSpec } from "../types"; /** * Project a built `Model` back to spec stage: `compat` becomes the verbatim * sparse override record (`compatConfig`), never the resolved view. Discovery * mappers spread these references into the specs they hand to the model * manager, which rebuilds via `buildModel`. */ export function toModelSpec(model: Model): ModelSpec { const { compat: _compat, compatConfig, ...rest } = model; return { ...rest, compat: compatConfig } as ModelSpec; } export function createBundledReferenceMap( provider: Parameters[0], ): Map> { const references = new Map>(); for (const model of getBundledModels(provider)) { references.set(model.id, toModelSpec(model as Model)); } return references; } type ProviderReferenceSource = Map> | (() => Map>); let globalReferences: Map> | undefined; function getGlobalReferences(): Map> { if (globalReferences) { return globalReferences; } const references = new Map>(); for (const provider of getBundledProviders()) { for (const model of getBundledModels(provider as Parameters[0])) { const candidate = model as Model; if (isZeroCostXaiOAuthReference(candidate)) { continue; } const existing = references.get(candidate.id); if (!existing) { references.set(candidate.id, candidate); } else if (candidate.contextWindow !== existing.contextWindow) { if ((candidate.contextWindow ?? 0) > (existing.contextWindow ?? 0)) { references.set(candidate.id, candidate); } } else if (candidate.maxTokens !== existing.maxTokens) { if ((candidate.maxTokens ?? 0) > (existing.maxTokens ?? 0)) { references.set(candidate.id, candidate); } } else if (existing.provider !== "openai" && candidate.provider === "openai") { references.set(candidate.id, candidate); } } } globalReferences = references; return references; } export function createReferenceResolver( providerReferenceSource: ProviderReferenceSource, ): (modelId: string) => ModelSpec | undefined { let lazyProviderReferences: Map> | undefined; const getProviderReferences = typeof providerReferenceSource === "function" ? () => (lazyProviderReferences ??= providerReferenceSource()) : () => providerReferenceSource; return (modelId: string) => { const providerRefs = getProviderReferences(); const globalRefs = getGlobalReferences(); const providerRef = providerRefs.get(modelId); if (providerRef) return providerRef; const globalRef = globalRefs.get(modelId); return globalRef ? toModelSpec(globalRef as Model) : undefined; }; }