spb/chat-spboucher Public
Private universal chat interface over the OpenRouter ecosystem — 400+ models, branching, streaming, usage tracking. Next.js 16 + SQLite, PWA, deployed on m4m64a at chat.spboucher.ai
TypeScript 78.8%
CSS 15.1%
JavaScript 4.9%
Shell 1.2%
1// Author: Simon-Pierre Boucher2// Contact: contact@spboucher.ai3// Project: chat.spboucher.ai45import type { ORModelRaw } from "./schemas";6import type { ModelDefinition } from "./types";78/** Derive normalized capabilities from OpenRouter metadata — never from string-parsing model IDs. */9export function deriveCapabilities(raw: ORModelRaw): ModelDefinition["capabilities"] {10 const inputs = raw.architecture?.input_modalities ?? [];11 const outputs = raw.architecture?.output_modalities ?? [];12 const params = raw.supported_parameters ?? [];13 return {14 text: outputs.length === 0 || outputs.includes("text"),15 vision: inputs.includes("image"),16 reasoning: params.includes("reasoning") || params.includes("include_reasoning"),17 tools: params.includes("tools") || params.includes("tool_choice"),18 structuredOutput: params.includes("structured_outputs") || params.includes("response_format"),19 };20}21