TypeScript 97.4%
SQL 1%
JavaScript 0.9%
CSS 0.6%
1import type { CatalogEntry } from "@/lib/ai/registry/catalog";2import type { ModelPricing } from "@/lib/ai/core/types";34/**5 * Mistral documented augmentation. The listing already carries capabilities/limits/aliases; this6 * file adds pricing (mistral.ai/pricing, audited 2026-09-08 — see docs/provider-research/mistral.md)7 * and per-model quirks. Keys are billing model names (the `name` field) or ids.8 */9const MISTRAL_PRICING_BASE: Record<string, ModelPricing> = {10 "mistral-medium-2604": { inputPerMillion: 1.5, outputPerMillion: 7.5, cachedInputPerMillion: 0.15 },11 "mistral-small-2603": { inputPerMillion: 0.15, outputPerMillion: 0.6, cachedInputPerMillion: 0.015 },12 "mistral-large-2512": { inputPerMillion: 0.5, outputPerMillion: 1.5, cachedInputPerMillion: 0.05 },13 "ministral-14b-2512": { inputPerMillion: 0.2, outputPerMillion: 0.2, cachedInputPerMillion: 0.02 },14 "ministral-8b-2512": { inputPerMillion: 0.15, outputPerMillion: 0.15, cachedInputPerMillion: 0.015 },15 "ministral-3b-2512": { inputPerMillion: 0.1, outputPerMillion: 0.1, cachedInputPerMillion: 0.01 },16 "codestral-2508": { inputPerMillion: 0.3, outputPerMillion: 0.9, cachedInputPerMillion: 0.03 },17 "zai-glm-5-2": { inputPerMillion: 1.4, outputPerMillion: 4.4, cachedInputPerMillion: 0.14 },18 "voxtral-small-2507": { inputPerMillion: 0.1, outputPerMillion: 0.4 },19 "labs-leanstral-1-5": { inputPerMillion: 0, outputPerMillion: 0, cachedInputPerMillion: 0 },20};2122/** Aliases (`*-latest`, marketing names) bill as their base model. */23export const MISTRAL_PRICING: Record<string, ModelPricing> = {24 ...MISTRAL_PRICING_BASE,25 "mistral-medium-latest": MISTRAL_PRICING_BASE["mistral-medium-2604"],26 "mistral-medium": MISTRAL_PRICING_BASE["mistral-medium-2604"],27 "mistral-medium-3-5": MISTRAL_PRICING_BASE["mistral-medium-2604"],28 "mistral-medium-3.5": MISTRAL_PRICING_BASE["mistral-medium-2604"],29 "mistral-medium-3": MISTRAL_PRICING_BASE["mistral-medium-2604"],30 "mistral-vibe-cli-latest": MISTRAL_PRICING_BASE["mistral-medium-2604"],31 "mistral-vibe-cli-with-tools": MISTRAL_PRICING_BASE["mistral-medium-2604"],32 "magistral-medium-latest": MISTRAL_PRICING_BASE["mistral-medium-2604"],33 "mistral-small-latest": MISTRAL_PRICING_BASE["mistral-small-2603"],34 "mistral-vibe-cli-fast": MISTRAL_PRICING_BASE["mistral-small-2603"],35 "magistral-small-latest": MISTRAL_PRICING_BASE["mistral-small-2603"],36 "mistral-large-latest": MISTRAL_PRICING_BASE["mistral-large-2512"],37 "ministral-14b-latest": MISTRAL_PRICING_BASE["ministral-14b-2512"],38 "ministral-8b-latest": MISTRAL_PRICING_BASE["ministral-8b-2512"],39 "ministral-3b-latest": MISTRAL_PRICING_BASE["ministral-3b-2512"],40 "codestral-latest": MISTRAL_PRICING_BASE["codestral-2508"],41 "mistral-code-latest": MISTRAL_PRICING_BASE["codestral-2508"],42 "mistral-code-fim-latest": MISTRAL_PRICING_BASE["codestral-2508"],43 "glm-5-2": MISTRAL_PRICING_BASE["zai-glm-5-2"],44 "voxtral-small-latest": MISTRAL_PRICING_BASE["voxtral-small-2507"],45 "labs-leanstral-1-5-1": MISTRAL_PRICING_BASE["labs-leanstral-1-5"],46};4748export function mistralPricingFor(id: string, name?: string): ModelPricing | null {49 const hit = MISTRAL_PRICING[id] ?? (name ? MISTRAL_PRICING[name] : undefined) ?? MISTRAL_PRICING[id.replace(/-latest$/, "")];50 return hit ? { ...hit, source: "mistral-pricing-page", asOf: "2026-09-08" } : null;51}5253export const MISTRAL_CATALOG = new Map<string, CatalogEntry>();5455/** Listed by /v1/models but not chat models (OCR, embeddings, moderation, audio, FIM-only). */56export const MISTRAL_NON_CHAT = /embed|ocr|moderation|voxtral|transcribe|tts|fim/i;57