TypeScript 97.4%
SQL 1%
JavaScript 0.9%
CSS 0.6%
1import type { CatalogEntry } from "@/lib/ai/registry/catalog";2import type { ModelCapabilities } from "@/lib/ai/core/types";34/**5 * xAI documented augmentation. `/v1/language-models` gives modalities, pricing and aliases6 * but not context windows or parameter support — those come from docs + probes7 * (docs/provider-research/xai.md, audited 2026-09-08).8 *9 * Verified rules: never send frequency/presence penalties; `stop` only on10 * grok-4.20-0309-non-reasoning; `reasoning_effort` only on 4.6 / 4.5 / 4.3 / multi-agent.11 * Files: xAI needs an uploaded file id (Files API) → PolyLLM inlines text files and does not12 * send PDFs (marked `files: false`). Web search requires /v1/responses.13 */14const base: ModelCapabilities = {15 text: true,16 vision: true,17 audioInput: false,18 audioOutput: false,19 imageGeneration: false,20 video: false,21 reasoning: true,22 tools: true,23 structuredOutput: true,24 streaming: true,25 files: false,26 webSearch: true,27};2829const baseParams = { temperature: true, topP: true, topK: true, maxTokens: true, seed: true, stop: false, frequencyPenalty: false, presencePenalty: false, temperatureRange: { min: 0, max: 2 } };3031export const XAI_CATALOG = new Map<string, CatalogEntry>([32 [33 "grok-4.6",34 {35 displayName: "Grok 4.6",36 family: "Grok 4.6",37 capabilities: base,38 limits: { contextTokens: 500_000, maxOutputTokens: 128_000 },39 parameters: { ...baseParams, reasoningEffort: true, reasoningEffortLevels: ["low", "medium", "high", "xhigh"] },40 status: "active",41 sortWeight: 100,42 metadata: { alwaysReasoning: true, knowledgeCutoff: "2026-02-01" },43 },44 ],45 [46 "grok-4.5",47 {48 displayName: "Grok 4.5",49 family: "Grok 4.5",50 capabilities: base,51 limits: { contextTokens: 500_000, maxOutputTokens: 128_000 },52 parameters: { ...baseParams, reasoningEffort: true, reasoningEffortLevels: ["low", "medium", "high"] },53 status: "active",54 sortWeight: 95,55 metadata: { alwaysReasoning: true, agentic: true },56 },57 ],58 [59 "grok-4.3",60 {61 displayName: "Grok 4.3",62 family: "Grok 4.3",63 capabilities: base,64 limits: { contextTokens: 1_000_000, maxOutputTokens: 128_000 },65 parameters: { ...baseParams, reasoningEffort: true, reasoningEffortLevels: ["none", "low", "medium", "high"] },66 status: "active",67 sortWeight: 90,68 metadata: { alwaysReasoning: false },69 },70 ],71 [72 "grok-4.20-0309-reasoning",73 {74 displayName: "Grok 4.20 Reasoning",75 family: "Grok 4.20",76 capabilities: base,77 limits: { contextTokens: 1_000_000, maxOutputTokens: 128_000 },78 parameters: { ...baseParams, reasoningEffort: false },79 status: "active",80 sortWeight: 80,81 metadata: { alwaysReasoning: true, fixedReasoning: true },82 },83 ],84 [85 "grok-4.20-0309-non-reasoning",86 {87 displayName: "Grok 4.20 Non-Reasoning",88 family: "Grok 4.20",89 capabilities: { ...base, reasoning: false },90 limits: { contextTokens: 1_000_000, maxOutputTokens: 128_000 },91 parameters: { ...baseParams, stop: true, reasoningEffort: false },92 status: "active",93 sortWeight: 78,94 },95 ],96 [97 "grok-4.20-multi-agent-0309",98 {99 displayName: "Grok 4.20 Multi-Agent",100 family: "Grok 4.20",101 capabilities: { ...base, tools: false },102 limits: { contextTokens: 1_000_000, maxOutputTokens: 128_000 },103 parameters: { ...baseParams, reasoningEffort: true, reasoningEffortLevels: ["low", "medium", "high", "xhigh"] },104 status: "preview",105 sortWeight: 70,106 metadata: { alwaysReasoning: true, responsesOnly: true, beta: true },107 },108 ],109 [110 "grok-build-0.1",111 {112 displayName: "Grok Build 0.1",113 family: "Grok Build",114 capabilities: base,115 limits: { contextTokens: 256_000, maxOutputTokens: 128_000 },116 parameters: { ...baseParams, reasoningEffort: false },117 status: "active",118 sortWeight: 75,119 metadata: { alwaysReasoning: true, fixedReasoning: true, coding: true },120 },121 ],122]);123