import type { Api, Model } from "../src/types.js";
export function renderModelsFile(providers: Record<string, Record<string, Model<Api>>>): string {
let output = `// This file is auto-generated by scripts/generate-models.ts
// Do not edit manually - run 'npm run generate-models' to update
import type { Model } from "./types.js";
export const MODELS = {
`;
for (const providerId of Object.keys(providers).sort()) {
const models = providers[providerId];
output += `\t${JSON.stringify(providerId)}: {\n`;
for (const modelId of Object.keys(models).sort()) {
const model = models[modelId];
output += `\t\t${JSON.stringify(model.id)}: {\n`;
output += `\t\t\tid: ${JSON.stringify(model.id)},\n`;
output += `\t\t\tname: ${JSON.stringify(model.name)},\n`;
output += `\t\t\tapi: ${JSON.stringify(model.api)},\n`;
output += `\t\t\tprovider: ${JSON.stringify(model.provider)},\n`;
if (model.baseUrl !== undefined) {
output += `\t\t\tbaseUrl: ${JSON.stringify(model.baseUrl)},\n`;
}
if (model.headers) output += `\t\t\theaders: ${JSON.stringify(model.headers)},\n`;
if (model.compat) output += `\t\t\tcompat: ${JSON.stringify(model.compat)},\n`;
output += `\t\t\treasoning: ${model.reasoning},\n`;
if (model.thinkingLevelMap) {
output += `\t\t\tthinkingLevelMap: ${JSON.stringify(model.thinkingLevelMap)},\n`;
}
output += `\t\t\tinput: [${model.input.map((input) => JSON.stringify(input)).join(", ")}],\n`;
output += `\t\t\tcost: {\n`;
output += `\t\t\t\tinput: ${model.cost.input},\n`;
output += `\t\t\t\toutput: ${model.cost.output},\n`;
output += `\t\t\t\tcacheRead: ${model.cost.cacheRead},\n`;
output += `\t\t\t\tcacheWrite: ${model.cost.cacheWrite},\n`;
output += `\t\t\t},\n`;
output += `\t\t\tcontextWindow: ${model.contextWindow},\n`;
output += `\t\t\tmaxTokens: ${model.maxTokens},\n`;
if (model.featured) output += `\t\t\tfeatured: true,\n`;
output += `\t\t} satisfies Model<${JSON.stringify(model.api)}>,\n`;
}
output += `\t},\n`;
}
return `${output}} as const;\n`;
}