SPB Git forge

spb/polyllm

Public
15commits 1branches 0releases
2.2 MBsize
maindefault branch
13 days agolast push
TypeScript 97.4% SQL 1% JavaScript 0.9% CSS 0.6%
1.9 KB · 32 lines typescript
Raw Blame History
1// Picks the probe models from out/models.json (written by 00-models.ts).2import { readFileSync } from "node:fs";3import { OUT } from "./lib.ts";45const listing: any[] = JSON.parse(readFileSync(`${OUT}models.json`, "utf8")).data;6export const byId = new Map<string, any>(listing.map((m) => [m.id, m]));78function pick(preferred: string, fallback: (m: any) => boolean) {9  if (byId.has(preferred)) return preferred;10  const alt = listing11    .filter(fallback)12    .filter((m) => !m.id.includes(":"))13    .sort((a, b) => Number(a.pricing.prompt) - Number(b.pricing.prompt))[0];14  if (!alt) throw new Error(`no model for ${preferred}`);15  console.log(`(${preferred} missing → using ${alt.id})`);16  return alt.id as string;17}1819export const OPENAI = pick("openai/gpt-5.4-nano", (m) => m.id.startsWith("openai/gpt-5") && m.id.includes("nano"));20export const ANTHROPIC = pick("anthropic/claude-haiku-4.5", (m) => m.id.startsWith("anthropic/claude-haiku"));21export const GOOGLE = pick("google/gemini-3.5-flash-lite", (m) => m.id.startsWith("google/gemini-3") && m.id.includes("lite"));22export const DEEPSEEK = pick("deepseek/deepseek-v4-flash", (m) => m.id.startsWith("deepseek/deepseek-v4"));23export const XAI = pick("x-ai/grok-4.20-0309-non-reasoning", (m) => m.id === "x-ai/grok-4.20" || (m.id.startsWith("x-ai/grok-4") && m.reasoning?.default_enabled === false));2425export const MODELS = [OPENAI, ANTHROPIC, GOOGLE, DEEPSEEK, XAI];26export const VISION_MODELS = MODELS.filter((id) => (byId.get(id)?.architecture?.input_modalities ?? []).includes("image"));27console.log("probe models:", MODELS.join(", "));28for (const id of MODELS) {29  const m = byId.get(id);30  console.log(`  ${id}: in=${m.pricing.prompt} out=${m.pricing.completion} ctx=${m.context_length} maxout=${m.top_provider?.max_completion_tokens} mods=${m.architecture.input_modalities} reasoning=${JSON.stringify(m.reasoning)} params=${m.supported_parameters.join(",")}`);31}32