// Author: Simon-Pierre Boucher // Contact: contact@spboucher.ai // Project: chat.spboucher.ai import type { ORModelRaw } from "./schemas"; import type { ModelDefinition } from "./types"; /** Derive normalized capabilities from OpenRouter metadata — never from string-parsing model IDs. */ export function deriveCapabilities(raw: ORModelRaw): ModelDefinition["capabilities"] { const inputs = raw.architecture?.input_modalities ?? []; const outputs = raw.architecture?.output_modalities ?? []; const params = raw.supported_parameters ?? []; return { text: outputs.length === 0 || outputs.includes("text"), vision: inputs.includes("image"), reasoning: params.includes("reasoning") || params.includes("include_reasoning"), tools: params.includes("tools") || params.includes("tool_choice"), structuredOutput: params.includes("structured_outputs") || params.includes("response_format"), }; }