SPB Git

Repository Public Research preview

knowledge.mjs 1.8 KB 31 lines javascript

1import { readFileSync } from "node:fs";23export const KB = JSON.parse(readFileSync(new URL("../knowledge.json", import.meta.url), "utf8"));4export const MODELS = KB.models;5export const RECOMMENDED = KB.recommended;67/** Resolve an alias or a dated snapshot (gpt-5.4-2026-03-05 → gpt-5.4). Null when never probed. */8export function resolveModel(id) {9  if (typeof id !== "string") return null;10  if (MODELS[id]) return MODELS[id];11  const base = id.replace(/-\d{4}-\d{2}-\d{2}$/, "");12  return MODELS[base] ?? null;13}14export function suggestModels(id) {15  const base = String(id).toLowerCase();16  const ids = Object.keys(MODELS);17  const pre = ids.filter((k) => k.startsWith(base) || base.startsWith(k)).sort((a, b) => b.length - a.length);18  if (pre.length) return pre.slice(0, 3);19  const words = base.split(/[^a-z0-9.]+/).filter(Boolean);20  return ids.map((k) => [k, words.filter((w) => k.includes(w)).length]).filter(([, n]) => n > 1).sort((a, b) => b[1] - a[1]).slice(0, 3).map(([k]) => k);21}22export function modelSummary(m) {23  const p = m.pricing_usd_per_mtok;24  return {25    id: m.id, reasoning_model: m.reasoning_model, context_window: m.context_window, max_output_tokens: m.max_output_tokens, knowledge_cutoff: m.knowledge_cutoff,26    price_usd_per_mtok: p ? { input: p.input, cached_input: p.cached_input, output: p.output, batch_input: p.batch_input, batch_output: p.batch_output } : null,27    effort_levels: m.responses.effort_levels, default_effort_is_none: m.responses.default_effort_is_none,28    sampling_params: m.responses.sampling_params, chat_completions: m.chat_completions.supported ? (m.chat_completions.function_tools === "yes" ? "supported" : m.chat_completions.function_tools === "effort_none_only" ? "supported; function tools only with reasoning_effort none" : "supported; no function tools (use Responses)") : "not supported (Responses only)",29  };30}31
Files main
Menu

Theme