@everworker/oneringai 0.4.6 → 0.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/Vendor.ts","../../src/domain/entities/Model.ts","../../src/domain/entities/Services.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Supported AI Vendors\n *\n * Use this enum instead of string literals for type safety.\n * These map to specific provider implementations.\n */\nexport const Vendor = {\n OpenAI: 'openai',\n Anthropic: 'anthropic',\n Google: 'google',\n GoogleVertex: 'google-vertex',\n Groq: 'groq',\n Together: 'together',\n Perplexity: 'perplexity',\n Grok: 'grok',\n DeepSeek: 'deepseek',\n Mistral: 'mistral',\n Ollama: 'ollama',\n Custom: 'custom', // OpenAI-compatible endpoint\n} as const;\n\nexport type Vendor = (typeof Vendor)[keyof typeof Vendor];\n\n/**\n * All vendor values as array (useful for validation)\n */\nexport const VENDORS = Object.values(Vendor);\n\n/**\n * Check if a string is a valid vendor\n */\nexport function isVendor(value: string): value is Vendor {\n return VENDORS.includes(value as Vendor);\n}\n","import { Vendor } from '../../core/Vendor.js';\nimport type { Vendor as VendorType } from '../../core/Vendor.js';\n\n/**\n * Complete description of an LLM model including capabilities, pricing, and features\n */\nexport interface ILLMDescription {\n /** Model identifier (e.g., \"gpt-5.2-instant\") */\n name: string;\n\n /** Vendor/provider (Vendor.OpenAI, Vendor.Anthropic, etc.) */\n provider: string;\n\n /** Optional description of the model */\n description?: string;\n\n /** Whether the model is currently available for use */\n isActive: boolean;\n\n /** Whether this model is a preferred/recommended choice for its vendor */\n preferred?: boolean;\n\n /** Release date (YYYY-MM-DD format) */\n releaseDate?: string;\n\n /** Knowledge cutoff date */\n knowledgeCutoff?: string;\n\n /** Model capabilities and pricing */\n features: {\n /** Supports extended reasoning/thinking */\n reasoning?: boolean;\n\n /** Supports streaming responses */\n streaming: boolean;\n\n /** Supports structured output (JSON mode) */\n structuredOutput?: boolean;\n\n /** Supports function/tool calling */\n functionCalling?: boolean;\n\n /** Supports fine-tuning */\n fineTuning?: boolean;\n\n /** Supports predicted outputs */\n predictedOutputs?: boolean;\n\n /** Supports realtime API */\n realtime?: boolean;\n\n /** Supports image input (vision) */\n vision?: boolean;\n\n /** Supports audio input/output */\n audio?: boolean;\n\n /** Supports video input */\n video?: boolean;\n\n /** Supports extended thinking (Claude-specific) */\n extendedThinking?: boolean;\n\n /** Supports batch API */\n batchAPI?: boolean;\n\n /** Supports prompt caching */\n promptCaching?: boolean;\n\n /** Parameter support - indicates which sampling parameters are supported */\n parameters?: {\n /** Supports temperature parameter */\n temperature?: boolean;\n /** Supports top_p parameter */\n topP?: boolean;\n /** Supports frequency_penalty parameter */\n frequencyPenalty?: boolean;\n /** Supports presence_penalty parameter */\n presencePenalty?: boolean;\n };\n\n /** Input specifications */\n input: {\n /** Maximum input context window (in tokens) */\n tokens: number;\n\n /** Supports text input */\n text: boolean;\n\n /** Supports image input */\n image?: boolean;\n\n /** Supports audio input */\n audio?: boolean;\n\n /** Supports video input */\n video?: boolean;\n\n /** Cost per million tokens (input) */\n cpm: number;\n\n /** Cost per million cached tokens (if prompt caching supported) */\n cpmCached?: number;\n };\n\n /** Output specifications */\n output: {\n /** Maximum output tokens */\n tokens: number;\n\n /** Supports text output */\n text: boolean;\n\n /** Supports image output */\n image?: boolean;\n\n /** Supports audio output */\n audio?: boolean;\n\n /** Cost per million tokens (output) */\n cpm: number;\n };\n };\n}\n\n/**\n * Model name constants organized by vendor\n * Updated: March 2026 - Contains only verified, currently available models\n */\nexport const LLM_MODELS = {\n [Vendor.OpenAI]: {\n // GPT-5.3 Series\n GPT_5_3_CODEX: 'gpt-5.3-codex',\n GPT_5_3_CHAT: 'gpt-5.3-chat-latest',\n // GPT-5.2 Series (Current Flagship)\n GPT_5_2: 'gpt-5.2',\n GPT_5_2_PRO: 'gpt-5.2-pro',\n GPT_5_2_CODEX: 'gpt-5.2-codex',\n GPT_5_2_CHAT: 'gpt-5.2-chat-latest',\n // GPT-5.1 Series\n GPT_5_1: 'gpt-5.1',\n GPT_5_1_CODEX: 'gpt-5.1-codex',\n GPT_5_1_CODEX_MAX: 'gpt-5.1-codex-max',\n GPT_5_1_CODEX_MINI: 'gpt-5.1-codex-mini',\n GPT_5_1_CHAT: 'gpt-5.1-chat-latest',\n // GPT-5 Series\n GPT_5: 'gpt-5',\n GPT_5_MINI: 'gpt-5-mini',\n GPT_5_NANO: 'gpt-5-nano',\n GPT_5_CHAT: 'gpt-5-chat-latest',\n // GPT-4.1 Series\n GPT_4_1: 'gpt-4.1',\n GPT_4_1_MINI: 'gpt-4.1-mini',\n GPT_4_1_NANO: 'gpt-4.1-nano',\n // GPT-4o Series (Legacy)\n GPT_4O: 'gpt-4o',\n GPT_4O_MINI: 'gpt-4o-mini',\n // Reasoning Models (o-series)\n O3_MINI: 'o3-mini',\n O1: 'o1',\n },\n [Vendor.Anthropic]: {\n // Claude 4.6 Series (Current)\n CLAUDE_OPUS_4_6: 'claude-opus-4-6',\n CLAUDE_SONNET_4_6: 'claude-sonnet-4-6',\n // Claude 4.5 Series\n CLAUDE_OPUS_4_5: 'claude-opus-4-5-20251101',\n CLAUDE_SONNET_4_5: 'claude-sonnet-4-5-20250929',\n CLAUDE_HAIKU_4_5: 'claude-haiku-4-5-20251001',\n // Claude 4.x Legacy\n CLAUDE_OPUS_4_1: 'claude-opus-4-1-20250805',\n CLAUDE_OPUS_4: 'claude-opus-4-20250514',\n CLAUDE_SONNET_4: 'claude-sonnet-4-20250514',\n CLAUDE_SONNET_3_7: 'claude-3-7-sonnet-20250219',\n // Claude 3.x Legacy (Deprecated)\n CLAUDE_HAIKU_3: 'claude-3-haiku-20240307',\n },\n [Vendor.Google]: {\n // Gemini 3.1 Series (Preview)\n GEMINI_3_1_PRO_PREVIEW: 'gemini-3.1-pro-preview',\n GEMINI_3_1_FLASH_LITE_PREVIEW: 'gemini-3.1-flash-lite-preview',\n GEMINI_3_1_FLASH_IMAGE_PREVIEW: 'gemini-3.1-flash-image-preview',\n // Gemini 3 Series (Preview)\n GEMINI_3_FLASH_PREVIEW: 'gemini-3-flash-preview',\n GEMINI_3_PRO_PREVIEW: 'gemini-3-pro-preview',\n GEMINI_3_PRO_IMAGE_PREVIEW: 'gemini-3-pro-image-preview',\n // Gemini 2.5 Series (Production)\n GEMINI_2_5_PRO: 'gemini-2.5-pro',\n GEMINI_2_5_FLASH: 'gemini-2.5-flash',\n GEMINI_2_5_FLASH_LITE: 'gemini-2.5-flash-lite',\n GEMINI_2_5_FLASH_IMAGE: 'gemini-2.5-flash-image',\n },\n [Vendor.Grok]: {\n // Grok 4.1 Series (2M context, fast)\n GROK_4_1_FAST_REASONING: 'grok-4-1-fast-reasoning',\n GROK_4_1_FAST_NON_REASONING: 'grok-4-1-fast-non-reasoning',\n // Grok 4 Series\n GROK_4_FAST_REASONING: 'grok-4-fast-reasoning',\n GROK_4_FAST_NON_REASONING: 'grok-4-fast-non-reasoning',\n GROK_4_0709: 'grok-4-0709',\n // Grok Code\n GROK_CODE_FAST_1: 'grok-code-fast-1',\n // Grok 3 Series\n GROK_3: 'grok-3',\n GROK_3_MINI: 'grok-3-mini',\n // Grok 2 Series (Vision)\n GROK_2_VISION_1212: 'grok-2-vision-1212',\n },\n} as const;\n\n/**\n * Complete model registry with all model metadata\n * Updated: March 2026 - Verified from official vendor documentation\n */\nexport const MODEL_REGISTRY: Record<string, ILLMDescription> = {\n // ============================================================================\n // OpenAI Models (Verified from platform.openai.com)\n // ============================================================================\n\n // GPT-5.3 Series\n 'gpt-5.3-codex': {\n name: 'gpt-5.3-codex',\n provider: Vendor.OpenAI,\n description: 'Latest codex model for coding and agentic tasks. Reasoning.effort: low, medium, high, xhigh',\n isActive: true,\n releaseDate: '2026-02-01',\n knowledgeCutoff: '2025-08-31',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 1.75,\n cpmCached: 0.175,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 14,\n },\n },\n },\n\n 'gpt-5.3-chat-latest': {\n name: 'gpt-5.3-chat-latest',\n provider: Vendor.OpenAI,\n description: 'Latest GPT-5.3 chat model for general-purpose use',\n isActive: true,\n releaseDate: '2026-02-01',\n knowledgeCutoff: '2025-08-31',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 128000,\n text: true,\n image: true,\n cpm: 1.75,\n cpmCached: 0.175,\n },\n output: {\n tokens: 16000,\n text: true,\n cpm: 14,\n },\n },\n },\n\n // GPT-5.2 Series (Current Flagship)\n 'gpt-5.2': {\n name: 'gpt-5.2',\n provider: Vendor.OpenAI,\n description: 'Flagship model for coding and agentic tasks. Reasoning.effort: none, low, medium, high, xhigh',\n isActive: true,\n preferred: true,\n releaseDate: '2025-12-01',\n knowledgeCutoff: '2025-08-31',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 1.75,\n cpmCached: 0.175,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 14,\n },\n },\n },\n\n 'gpt-5.2-pro': {\n name: 'gpt-5.2-pro',\n provider: Vendor.OpenAI,\n description: 'GPT-5.2 pro produces smarter and more precise responses. Reasoning.effort: medium, high, xhigh',\n isActive: true,\n releaseDate: '2025-12-01',\n knowledgeCutoff: '2025-08-31',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: false,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 21,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 168,\n },\n },\n },\n\n 'gpt-5.2-codex': {\n name: 'gpt-5.2-codex',\n provider: Vendor.OpenAI,\n description: 'GPT-5.2 codex for coding and agentic tasks. Reasoning.effort: low, medium, high, xhigh',\n isActive: true,\n preferred: true,\n releaseDate: '2025-12-01',\n knowledgeCutoff: '2025-08-31',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 1.75,\n cpmCached: 0.175,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 14,\n },\n },\n },\n\n 'gpt-5.2-chat-latest': {\n name: 'gpt-5.2-chat-latest',\n provider: Vendor.OpenAI,\n description: 'GPT-5.2 chat model for general-purpose use',\n isActive: true,\n releaseDate: '2025-12-01',\n knowledgeCutoff: '2025-08-31',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 128000,\n text: true,\n image: true,\n cpm: 1.75,\n cpmCached: 0.175,\n },\n output: {\n tokens: 16000,\n text: true,\n cpm: 14,\n },\n },\n },\n\n // GPT-5.1 Series\n 'gpt-5.1': {\n name: 'gpt-5.1',\n provider: Vendor.OpenAI,\n description: 'Intelligent reasoning model for coding and agentic tasks. Reasoning.effort: none, low, medium, high',\n isActive: true,\n releaseDate: '2025-10-01',\n knowledgeCutoff: '2024-09-30',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 1.25,\n cpmCached: 0.125,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 10,\n },\n },\n },\n\n 'gpt-5.1-codex': {\n name: 'gpt-5.1-codex',\n provider: Vendor.OpenAI,\n description: 'GPT-5.1 codex for coding and agentic tasks with reasoning',\n isActive: true,\n releaseDate: '2025-10-01',\n knowledgeCutoff: '2024-09-30',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 1.25,\n cpmCached: 0.125,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 10,\n },\n },\n },\n\n 'gpt-5.1-codex-max': {\n name: 'gpt-5.1-codex-max',\n provider: Vendor.OpenAI,\n description: 'GPT-5.1 codex max for maximum reasoning depth on coding tasks',\n isActive: true,\n releaseDate: '2025-10-01',\n knowledgeCutoff: '2024-09-30',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 1.25,\n cpmCached: 0.125,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 10,\n },\n },\n },\n\n 'gpt-5.1-codex-mini': {\n name: 'gpt-5.1-codex-mini',\n provider: Vendor.OpenAI,\n description: 'GPT-5.1 codex mini for cost-efficient coding tasks',\n isActive: true,\n releaseDate: '2025-10-01',\n knowledgeCutoff: '2024-09-30',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 0.25,\n cpmCached: 0.025,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 2,\n },\n },\n },\n\n 'gpt-5.1-chat-latest': {\n name: 'gpt-5.1-chat-latest',\n provider: Vendor.OpenAI,\n description: 'GPT-5.1 chat model for general-purpose use',\n isActive: true,\n releaseDate: '2025-10-01',\n knowledgeCutoff: '2024-09-30',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 128000,\n text: true,\n image: true,\n cpm: 1.25,\n cpmCached: 0.125,\n },\n output: {\n tokens: 16000,\n text: true,\n cpm: 10,\n },\n },\n },\n\n // GPT-5 Series\n 'gpt-5': {\n name: 'gpt-5',\n provider: Vendor.OpenAI,\n description: 'Previous intelligent reasoning model for coding and agentic tasks. Reasoning.effort: minimal, low, medium, high',\n isActive: true,\n releaseDate: '2025-08-01',\n knowledgeCutoff: '2024-09-30',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 1.25,\n cpmCached: 0.125,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 10,\n },\n },\n },\n\n 'gpt-5-mini': {\n name: 'gpt-5-mini',\n provider: Vendor.OpenAI,\n description: 'Faster, cost-efficient version of GPT-5 for well-defined tasks and precise prompts',\n isActive: true,\n releaseDate: '2025-08-01',\n knowledgeCutoff: '2024-05-31',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 0.25,\n cpmCached: 0.025,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 2,\n },\n },\n },\n\n 'gpt-5-nano': {\n name: 'gpt-5-nano',\n provider: Vendor.OpenAI,\n description: 'Fastest, most cost-efficient GPT-5. Great for summarization and classification tasks',\n isActive: true,\n releaseDate: '2025-08-01',\n knowledgeCutoff: '2024-05-31',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 0.05,\n cpmCached: 0.005,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 0.4,\n },\n },\n },\n\n 'gpt-5-chat-latest': {\n name: 'gpt-5-chat-latest',\n provider: Vendor.OpenAI,\n description: 'GPT-5 chat model for general-purpose use',\n isActive: true,\n releaseDate: '2025-08-01',\n knowledgeCutoff: '2024-09-30',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 128000,\n text: true,\n image: true,\n cpm: 1.25,\n cpmCached: 0.125,\n },\n output: {\n tokens: 16000,\n text: true,\n cpm: 10,\n },\n },\n },\n\n // GPT-4.1 Series\n 'gpt-4.1': {\n name: 'gpt-4.1',\n provider: Vendor.OpenAI,\n description: 'GPT-4.1 specialized for coding with 1M token context window',\n isActive: true,\n releaseDate: '2025-04-14',\n knowledgeCutoff: '2024-06-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1000000,\n text: true,\n image: true,\n cpm: 2,\n cpmCached: 0.50,\n },\n output: {\n tokens: 32768,\n text: true,\n cpm: 8,\n },\n },\n },\n\n 'gpt-4.1-mini': {\n name: 'gpt-4.1-mini',\n provider: Vendor.OpenAI,\n description: 'Efficient GPT-4.1 model, beats GPT-4o in many benchmarks at 83% lower cost',\n isActive: true,\n releaseDate: '2025-04-14',\n knowledgeCutoff: '2024-06-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1000000,\n text: true,\n image: true,\n cpm: 0.4,\n cpmCached: 0.10,\n },\n output: {\n tokens: 16384,\n text: true,\n cpm: 1.6,\n },\n },\n },\n\n 'gpt-4.1-nano': {\n name: 'gpt-4.1-nano',\n provider: Vendor.OpenAI,\n description: 'Fastest and cheapest model with 1M context. 80.1% MMLU, ideal for classification/autocompletion',\n isActive: true,\n releaseDate: '2025-04-14',\n knowledgeCutoff: '2024-06-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1000000,\n text: true,\n image: true,\n cpm: 0.1,\n cpmCached: 0.025,\n },\n output: {\n tokens: 16384,\n text: true,\n cpm: 0.4,\n },\n },\n },\n\n // GPT-4o Series (Legacy)\n 'gpt-4o': {\n name: 'gpt-4o',\n provider: Vendor.OpenAI,\n description: 'Versatile omni model. Legacy but still available',\n isActive: true,\n releaseDate: '2024-05-13',\n knowledgeCutoff: '2023-10-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: true,\n realtime: true,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 128000,\n text: true,\n image: true,\n cpm: 2.5,\n cpmCached: 1.25,\n },\n output: {\n tokens: 16384,\n text: true,\n cpm: 10,\n },\n },\n },\n\n 'gpt-4o-mini': {\n name: 'gpt-4o-mini',\n provider: Vendor.OpenAI,\n description: 'Fast, affordable omni model',\n isActive: true,\n releaseDate: '2024-07-18',\n knowledgeCutoff: '2023-10-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: true,\n predictedOutputs: false,\n realtime: true,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 128000,\n text: true,\n image: true,\n cpm: 0.15,\n cpmCached: 0.075,\n },\n output: {\n tokens: 16384,\n text: true,\n cpm: 0.6,\n },\n },\n },\n\n // Reasoning Models (o-series)\n 'o3-mini': {\n name: 'o3-mini',\n provider: Vendor.OpenAI,\n description: 'Fast reasoning model tailored for coding, math, and science',\n isActive: true,\n releaseDate: '2025-01-31',\n knowledgeCutoff: '2023-10-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: false,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 200000,\n text: true,\n cpm: 1.1,\n cpmCached: 0.55,\n },\n output: {\n tokens: 100000,\n text: true,\n cpm: 4.4,\n },\n },\n },\n\n 'o1': {\n name: 'o1',\n provider: Vendor.OpenAI,\n description: 'Advanced reasoning model for complex problems',\n isActive: true,\n releaseDate: '2024-12-17',\n knowledgeCutoff: '2023-10-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 200000,\n text: true,\n image: true,\n cpm: 15,\n cpmCached: 7.50,\n },\n output: {\n tokens: 100000,\n text: true,\n cpm: 60,\n },\n },\n },\n\n // ============================================================================\n // Anthropic Models (Verified from platform.claude.com - March 2026)\n // ============================================================================\n\n // Claude 4.6 Series (Current)\n 'claude-opus-4-6': {\n name: 'claude-opus-4-6',\n provider: Vendor.Anthropic,\n description: 'The most intelligent model for building agents and coding. 128K output, adaptive thinking',\n isActive: true,\n preferred: true,\n releaseDate: '2026-02-01',\n knowledgeCutoff: '2025-05-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000, // 1M with beta header\n text: true,\n image: true,\n cpm: 5,\n cpmCached: 0.5,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 25,\n },\n },\n },\n\n 'claude-sonnet-4-6': {\n name: 'claude-sonnet-4-6',\n provider: Vendor.Anthropic,\n description: 'Best combination of speed and intelligence. Adaptive thinking, 1M context beta',\n isActive: true,\n preferred: true,\n releaseDate: '2026-02-01',\n knowledgeCutoff: '2025-08-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000, // 1M with beta header\n text: true,\n image: true,\n cpm: 3,\n cpmCached: 0.3,\n },\n output: {\n tokens: 64000,\n text: true,\n cpm: 15,\n },\n },\n },\n\n // Claude 4.5 Series\n 'claude-opus-4-5-20251101': {\n name: 'claude-opus-4-5-20251101',\n provider: Vendor.Anthropic,\n description: 'Legacy Opus 4.5. Premium model combining maximum intelligence with practical performance',\n isActive: true,\n releaseDate: '2025-11-01',\n knowledgeCutoff: '2025-05-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000,\n text: true,\n image: true,\n cpm: 5,\n cpmCached: 0.5,\n },\n output: {\n tokens: 64000,\n text: true,\n cpm: 25,\n },\n },\n },\n\n 'claude-sonnet-4-5-20250929': {\n name: 'claude-sonnet-4-5-20250929',\n provider: Vendor.Anthropic,\n description: 'Legacy Sonnet 4.5. Smart model for complex agents and coding',\n isActive: true,\n releaseDate: '2025-09-29',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000, // 1M with beta header\n text: true,\n image: true,\n cpm: 3,\n cpmCached: 0.3,\n },\n output: {\n tokens: 64000,\n text: true,\n cpm: 15,\n },\n },\n },\n\n 'claude-haiku-4-5-20251001': {\n name: 'claude-haiku-4-5-20251001',\n provider: Vendor.Anthropic,\n description: 'Fastest model with near-frontier intelligence. Matches Sonnet 4 on coding',\n isActive: true,\n releaseDate: '2025-10-01',\n knowledgeCutoff: '2025-02-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000,\n text: true,\n image: true,\n cpm: 1,\n cpmCached: 0.1,\n },\n output: {\n tokens: 64000,\n text: true,\n cpm: 5,\n },\n },\n },\n\n // Claude 4.x Legacy\n 'claude-opus-4-1-20250805': {\n name: 'claude-opus-4-1-20250805',\n provider: Vendor.Anthropic,\n description: 'Legacy Opus 4.1 focused on agentic tasks, real-world coding, and reasoning',\n isActive: true,\n releaseDate: '2025-08-05',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000,\n text: true,\n image: true,\n cpm: 15,\n cpmCached: 1.5,\n },\n output: {\n tokens: 32000,\n text: true,\n cpm: 75,\n },\n },\n },\n\n 'claude-opus-4-20250514': {\n name: 'claude-opus-4-20250514',\n provider: Vendor.Anthropic,\n description: 'Legacy Opus 4. Agentic tasks and reasoning',\n isActive: true,\n releaseDate: '2025-05-14',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000,\n text: true,\n image: true,\n cpm: 15,\n cpmCached: 1.5,\n },\n output: {\n tokens: 32000,\n text: true,\n cpm: 75,\n },\n },\n },\n\n 'claude-sonnet-4-20250514': {\n name: 'claude-sonnet-4-20250514',\n provider: Vendor.Anthropic,\n description: 'Legacy Sonnet 4. Supports 1M context beta',\n isActive: true,\n releaseDate: '2025-05-14',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000, // 1M with beta header\n text: true,\n image: true,\n cpm: 3,\n cpmCached: 0.3,\n },\n output: {\n tokens: 64000,\n text: true,\n cpm: 15,\n },\n },\n },\n\n 'claude-3-7-sonnet-20250219': {\n name: 'claude-3-7-sonnet-20250219',\n provider: Vendor.Anthropic,\n description: 'Deprecated. Claude 3.7 Sonnet with extended thinking',\n isActive: true,\n releaseDate: '2025-02-19',\n knowledgeCutoff: '2024-10-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000,\n text: true,\n image: true,\n cpm: 3,\n cpmCached: 0.3,\n },\n output: {\n tokens: 64000,\n text: true,\n cpm: 15,\n },\n },\n },\n\n // Claude 3.x Legacy (Deprecated - retiring April 19, 2026)\n 'claude-3-haiku-20240307': {\n name: 'claude-3-haiku-20240307',\n provider: Vendor.Anthropic,\n description: 'Deprecated. Retiring April 19, 2026. Migrate to Haiku 4.5',\n isActive: true,\n releaseDate: '2024-03-07',\n knowledgeCutoff: '2023-08-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000,\n text: true,\n image: true,\n cpm: 0.25,\n cpmCached: 0.03,\n },\n output: {\n tokens: 4096,\n text: true,\n cpm: 1.25,\n },\n },\n },\n\n // ============================================================================\n // Google Models (Verified from ai.google.dev - March 2026)\n // ============================================================================\n\n // Gemini 3.1 Series (Preview)\n 'gemini-3.1-pro-preview': {\n name: 'gemini-3.1-pro-preview',\n provider: Vendor.Google,\n description: 'Advanced intelligence with powerful agentic and coding capabilities. Replaces gemini-3-pro-preview',\n isActive: true,\n preferred: true,\n releaseDate: '2026-02-01',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: true,\n video: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1048576,\n text: true,\n image: true,\n audio: true,\n video: true,\n cpm: 2.00,\n cpmCached: 0.20,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 12.00,\n },\n },\n },\n\n 'gemini-3.1-flash-lite-preview': {\n name: 'gemini-3.1-flash-lite-preview',\n provider: Vendor.Google,\n description: 'High performance, budget-friendly for high-volume agentic tasks and data extraction',\n isActive: true,\n releaseDate: '2026-03-01',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: true,\n video: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1048576,\n text: true,\n image: true,\n audio: true,\n video: true,\n cpm: 0.25,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 1.50,\n },\n },\n },\n\n 'gemini-3.1-flash-image-preview': {\n name: 'gemini-3.1-flash-image-preview',\n provider: Vendor.Google,\n description: 'High-efficiency image generation with up to 4K output, search grounding support',\n isActive: true,\n releaseDate: '2026-02-01',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: false,\n functionCalling: false,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: false,\n input: {\n tokens: 131072,\n text: true,\n image: true,\n cpm: 0.25,\n },\n output: {\n tokens: 32768,\n text: true,\n image: true,\n cpm: 1.50,\n },\n },\n },\n\n // Gemini 3 Series (Preview)\n 'gemini-3-flash-preview': {\n name: 'gemini-3-flash-preview',\n provider: Vendor.Google,\n description: 'Most powerful agentic and coding model with frontier-class reasoning',\n isActive: true,\n preferred: true,\n releaseDate: '2025-12-01',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: true,\n video: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1048576,\n text: true,\n image: true,\n audio: true,\n video: true,\n cpm: 0.50,\n cpmCached: 0.05,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 3.00,\n },\n },\n },\n\n 'gemini-3-pro-preview': {\n name: 'gemini-3-pro-preview',\n provider: Vendor.Google,\n description: 'Deprecated. Shutting down March 9, 2026. Migrate to gemini-3.1-pro-preview',\n isActive: true,\n releaseDate: '2025-11-18',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: true,\n video: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1048576,\n text: true,\n image: true,\n audio: true,\n video: true,\n cpm: 1.25,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 10,\n },\n },\n },\n\n 'gemini-3-pro-image-preview': {\n name: 'gemini-3-pro-image-preview',\n provider: Vendor.Google,\n description: 'Professional-grade image generation and editing with reasoning',\n isActive: true,\n releaseDate: '2025-11-18',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: false,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: false,\n input: {\n tokens: 65536,\n text: true,\n image: true,\n cpm: 1.25,\n },\n output: {\n tokens: 32768,\n text: true,\n image: true,\n cpm: 10,\n },\n },\n },\n\n // Gemini 2.5 Series (Production)\n 'gemini-2.5-pro': {\n name: 'gemini-2.5-pro',\n provider: Vendor.Google,\n description: 'Most advanced model for complex tasks with deep reasoning and coding',\n isActive: true,\n releaseDate: '2025-03-01',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: true,\n video: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1048576,\n text: true,\n image: true,\n audio: true,\n video: true,\n cpm: 1.25,\n cpmCached: 0.125,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 10,\n },\n },\n },\n\n 'gemini-2.5-flash': {\n name: 'gemini-2.5-flash',\n provider: Vendor.Google,\n description: 'Best price-performance for low-latency, high-volume tasks with reasoning',\n isActive: true,\n releaseDate: '2025-06-17',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: true,\n video: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1048576,\n text: true,\n image: true,\n audio: true,\n video: true,\n cpm: 0.30,\n cpmCached: 0.03,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 2.50,\n },\n },\n },\n\n 'gemini-2.5-flash-lite': {\n name: 'gemini-2.5-flash-lite',\n provider: Vendor.Google,\n description: 'Fastest and most budget-friendly multimodal model in the 2.5 family',\n isActive: true,\n releaseDate: '2025-06-17',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: true,\n video: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1048576,\n text: true,\n image: true,\n audio: true,\n video: true,\n cpm: 0.10,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 0.40,\n },\n },\n },\n\n 'gemini-2.5-flash-image': {\n name: 'gemini-2.5-flash-image',\n provider: Vendor.Google,\n description: 'Fast native image generation and editing (Nano Banana)',\n isActive: true,\n releaseDate: '2025-10-01',\n knowledgeCutoff: '2025-06-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: false,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 65536,\n text: true,\n image: true,\n cpm: 0.15,\n },\n output: {\n tokens: 32768,\n text: true,\n image: true,\n cpm: 0.6,\n },\n },\n },\n\n // ============================================================================\n // xAI Grok Models (Verified from docs.x.ai - March 2026)\n // ============================================================================\n\n // Grok 4.1 Series (2M context, fast)\n 'grok-4-1-fast-reasoning': {\n name: 'grok-4-1-fast-reasoning',\n provider: Vendor.Grok,\n description: 'Fast Grok 4.1 with reasoning capabilities, 2M context window, vision support',\n isActive: true,\n releaseDate: '2025-11-01',\n knowledgeCutoff: '2024-11-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 2000000,\n text: true,\n image: true,\n cpm: 0.20,\n cpmCached: 0.05,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 0.50,\n },\n },\n },\n\n 'grok-4-1-fast-non-reasoning': {\n name: 'grok-4-1-fast-non-reasoning',\n provider: Vendor.Grok,\n description: 'Fast Grok 4.1 without reasoning, 2M context window, vision support',\n isActive: true,\n releaseDate: '2025-11-01',\n knowledgeCutoff: '2024-11-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 2000000,\n text: true,\n image: true,\n cpm: 0.20,\n cpmCached: 0.05,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 0.50,\n },\n },\n },\n\n // Grok Code Series\n 'grok-code-fast-1': {\n name: 'grok-code-fast-1',\n provider: Vendor.Grok,\n description: 'Specialized coding model with reasoning capabilities, 256K context',\n isActive: true,\n releaseDate: '2025-10-01',\n knowledgeCutoff: '2024-11-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: false,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 256000,\n text: true,\n cpm: 0.20,\n cpmCached: 0.02,\n },\n output: {\n tokens: 32768,\n text: true,\n cpm: 1.50,\n },\n },\n },\n\n // Grok 4 Series\n 'grok-4-fast-reasoning': {\n name: 'grok-4-fast-reasoning',\n provider: Vendor.Grok,\n description: 'Fast Grok 4 with reasoning capabilities, 2M context window, vision support',\n isActive: true,\n releaseDate: '2025-09-01',\n knowledgeCutoff: '2024-11-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 2000000,\n text: true,\n image: true,\n cpm: 0.20,\n cpmCached: 0.05,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 0.50,\n },\n },\n },\n\n 'grok-4-fast-non-reasoning': {\n name: 'grok-4-fast-non-reasoning',\n provider: Vendor.Grok,\n description: 'Fast Grok 4 without reasoning, 2M context window, vision support',\n isActive: true,\n releaseDate: '2025-09-01',\n knowledgeCutoff: '2024-11-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 2000000,\n text: true,\n image: true,\n cpm: 0.20,\n cpmCached: 0.05,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 0.50,\n },\n },\n },\n\n 'grok-4-0709': {\n name: 'grok-4-0709',\n provider: Vendor.Grok,\n description: 'Grok 4 flagship model (July 2025 release), 256K context, vision support, reasoning',\n isActive: true,\n releaseDate: '2025-07-09',\n knowledgeCutoff: '2024-11-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 256000,\n text: true,\n image: true,\n cpm: 3.00,\n cpmCached: 0.75,\n },\n output: {\n tokens: 32768,\n text: true,\n cpm: 15.00,\n },\n },\n },\n\n // Grok 3 Series\n 'grok-3-mini': {\n name: 'grok-3-mini',\n provider: Vendor.Grok,\n description: 'Lightweight, cost-efficient model with reasoning, 131K context',\n isActive: true,\n releaseDate: '2025-06-01',\n knowledgeCutoff: '2024-11-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: false,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 131072,\n text: true,\n cpm: 0.30,\n cpmCached: 0.07,\n },\n output: {\n tokens: 32768,\n text: true,\n cpm: 0.50,\n },\n },\n },\n\n 'grok-3': {\n name: 'grok-3',\n provider: Vendor.Grok,\n description: 'Production model for general-purpose tasks, 131K context',\n isActive: true,\n releaseDate: '2025-06-01',\n knowledgeCutoff: '2024-11-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: false,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 131072,\n text: true,\n cpm: 3.00,\n cpmCached: 0.75,\n },\n output: {\n tokens: 32768,\n text: true,\n cpm: 15.00,\n },\n },\n },\n\n // Grok 2 Series (Legacy - not in current docs)\n 'grok-2-vision-1212': {\n name: 'grok-2-vision-1212',\n provider: Vendor.Grok,\n description: 'Legacy vision model for image understanding, 32K context. Not in current xAI docs',\n isActive: true,\n releaseDate: '2024-12-12',\n knowledgeCutoff: '2024-11-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: false,\n promptCaching: false,\n input: {\n tokens: 32768,\n text: true,\n image: true,\n cpm: 2.00,\n },\n output: {\n tokens: 8192,\n text: true,\n cpm: 10.00,\n },\n },\n },\n};\n\n/**\n * Get model information by name\n * @param modelName The model identifier\n * @returns Model description or undefined if not found\n */\nexport function getModelInfo(modelName: string): ILLMDescription | undefined {\n return MODEL_REGISTRY[modelName];\n}\n\n/**\n * Get all models for a specific vendor\n * @param vendor The vendor to filter by\n * @returns Array of model descriptions for the vendor\n */\nexport function getModelsByVendor(vendor: VendorType): ILLMDescription[] {\n return Object.values(MODEL_REGISTRY).filter((model) => model.provider === vendor);\n}\n\n/**\n * Get all currently active models\n * @returns Array of active model descriptions\n */\nexport function getActiveModels(): ILLMDescription[] {\n return Object.values(MODEL_REGISTRY).filter((model) => model.isActive);\n}\n\n/**\n * Calculate the cost for a given model and token usage\n * @param model Model name\n * @param inputTokens Number of input tokens\n * @param outputTokens Number of output tokens\n * @param options Optional calculation options\n * @returns Total cost in dollars, or null if model not found\n */\nexport function calculateCost(\n model: string,\n inputTokens: number,\n outputTokens: number,\n options?: { useCachedInput?: boolean }\n): number | null {\n const modelInfo = getModelInfo(model);\n if (!modelInfo) {\n return null;\n }\n\n const inputCPM = options?.useCachedInput && modelInfo.features.input.cpmCached !== undefined\n ? modelInfo.features.input.cpmCached\n : modelInfo.features.input.cpm;\n\n const outputCPM = modelInfo.features.output.cpm;\n\n const inputCost = (inputTokens / 1_000_000) * inputCPM;\n const outputCost = (outputTokens / 1_000_000) * outputCPM;\n\n return inputCost + outputCost;\n}\n","/**\n * Services - Single source of truth for external service definitions\n *\n * All service metadata is defined in one place (SERVICE_DEFINITIONS).\n * Other exports are derived from this to maintain DRY principles.\n */\n\n/**\n * Service category type\n */\nexport type ServiceCategory =\n | 'major-vendors'\n | 'communication'\n | 'development'\n | 'productivity'\n | 'crm'\n | 'payments'\n | 'cloud'\n | 'storage'\n | 'email'\n | 'monitoring'\n | 'search'\n | 'scrape'\n | 'other';\n\n/**\n * Complete service definition - single source of truth\n */\nexport interface ServiceDefinition {\n /** Unique identifier (e.g., 'slack', 'github') */\n id: string;\n /** Human-readable name (e.g., 'Slack', 'GitHub') */\n name: string;\n /** Service category */\n category: ServiceCategory;\n /** URL pattern for auto-detection from baseURL */\n urlPattern: RegExp;\n /** Default base URL for API calls */\n baseURL: string;\n /** Documentation URL */\n docsURL?: string;\n /** Common OAuth scopes */\n commonScopes?: string[];\n}\n\n/**\n * Master list of all service definitions\n * This is the SINGLE SOURCE OF TRUTH - all other exports derive from this\n */\nexport const SERVICE_DEFINITIONS: readonly ServiceDefinition[] = [\n // ============ Major Vendors ============\n {\n id: 'microsoft',\n name: 'Microsoft',\n category: 'major-vendors',\n urlPattern: /graph\\.microsoft\\.com|login\\.microsoftonline\\.com/i,\n baseURL: 'https://graph.microsoft.com/v1.0',\n docsURL: 'https://learn.microsoft.com/en-us/graph/',\n commonScopes: ['User.Read', 'Files.ReadWrite', 'Mail.Read', 'Calendars.ReadWrite'],\n },\n {\n id: 'google',\n name: 'Google',\n category: 'major-vendors',\n urlPattern: /googleapis\\.com|accounts\\.google\\.com/i,\n baseURL: 'https://www.googleapis.com',\n docsURL: 'https://developers.google.com/',\n commonScopes: [\n 'https://www.googleapis.com/auth/drive',\n 'https://www.googleapis.com/auth/calendar',\n 'https://www.googleapis.com/auth/gmail.readonly',\n ],\n },\n\n // ============ Communication ============\n {\n id: 'slack',\n name: 'Slack',\n category: 'communication',\n urlPattern: /slack\\.com/i,\n baseURL: 'https://slack.com/api',\n docsURL: 'https://api.slack.com/methods',\n commonScopes: ['chat:write', 'channels:read', 'users:read'],\n },\n {\n id: 'discord',\n name: 'Discord',\n category: 'communication',\n urlPattern: /discord\\.com|discordapp\\.com/i,\n baseURL: 'https://discord.com/api/v10',\n docsURL: 'https://discord.com/developers/docs',\n commonScopes: ['bot', 'messages.read'],\n },\n {\n id: 'telegram',\n name: 'Telegram',\n category: 'communication',\n urlPattern: /api\\.telegram\\.org/i,\n baseURL: 'https://api.telegram.org',\n docsURL: 'https://core.telegram.org/bots/api',\n },\n {\n id: 'twitter',\n name: 'X (Twitter)',\n category: 'communication',\n urlPattern: /api\\.x\\.com|api\\.twitter\\.com/i,\n baseURL: 'https://api.x.com/2',\n docsURL: 'https://developer.x.com/en/docs/x-api',\n commonScopes: ['tweet.read', 'tweet.write', 'users.read', 'offline.access'],\n },\n\n // ============ Development & Project Management ============\n {\n id: 'github',\n name: 'GitHub',\n category: 'development',\n urlPattern: /api\\.github\\.com/i,\n baseURL: 'https://api.github.com',\n docsURL: 'https://docs.github.com/en/rest',\n commonScopes: ['repo', 'read:user', 'read:org'],\n },\n {\n id: 'gitlab',\n name: 'GitLab',\n category: 'development',\n urlPattern: /gitlab\\.com|gitlab\\./i,\n baseURL: 'https://gitlab.com/api/v4',\n docsURL: 'https://docs.gitlab.com/ee/api/',\n commonScopes: ['api', 'read_user', 'read_repository'],\n },\n {\n id: 'bitbucket',\n name: 'Bitbucket',\n category: 'development',\n urlPattern: /api\\.bitbucket\\.org|bitbucket\\.org/i,\n baseURL: 'https://api.bitbucket.org/2.0',\n docsURL: 'https://developer.atlassian.com/cloud/bitbucket/rest/',\n commonScopes: ['repository', 'pullrequest'],\n },\n {\n id: 'jira',\n name: 'Jira',\n category: 'development',\n urlPattern: /atlassian\\.net.*jira|jira\\./i,\n baseURL: 'https://your-domain.atlassian.net/rest/api/3',\n docsURL: 'https://developer.atlassian.com/cloud/jira/platform/rest/v3/',\n commonScopes: ['read:jira-work', 'write:jira-work'],\n },\n {\n id: 'linear',\n name: 'Linear',\n category: 'development',\n urlPattern: /api\\.linear\\.app/i,\n baseURL: 'https://api.linear.app/graphql',\n docsURL: 'https://developers.linear.app/docs',\n commonScopes: ['read', 'write'],\n },\n {\n id: 'asana',\n name: 'Asana',\n category: 'development',\n urlPattern: /api\\.asana\\.com/i,\n baseURL: 'https://app.asana.com/api/1.0',\n docsURL: 'https://developers.asana.com/docs',\n },\n {\n id: 'trello',\n name: 'Trello',\n category: 'development',\n urlPattern: /api\\.trello\\.com/i,\n baseURL: 'https://api.trello.com/1',\n docsURL: 'https://developer.atlassian.com/cloud/trello/rest/',\n commonScopes: ['read', 'write'],\n },\n\n // ============ Productivity & Collaboration ============\n {\n id: 'notion',\n name: 'Notion',\n category: 'productivity',\n urlPattern: /api\\.notion\\.com/i,\n baseURL: 'https://api.notion.com/v1',\n docsURL: 'https://developers.notion.com/reference',\n },\n {\n id: 'airtable',\n name: 'Airtable',\n category: 'productivity',\n urlPattern: /api\\.airtable\\.com/i,\n baseURL: 'https://api.airtable.com/v0',\n docsURL: 'https://airtable.com/developers/web/api',\n commonScopes: ['data.records:read', 'data.records:write'],\n },\n {\n id: 'confluence',\n name: 'Confluence',\n category: 'productivity',\n urlPattern: /atlassian\\.net.*wiki|confluence\\./i,\n baseURL: 'https://your-domain.atlassian.net/wiki/rest/api',\n docsURL: 'https://developer.atlassian.com/cloud/confluence/rest/',\n commonScopes: ['read:confluence-content.all', 'write:confluence-content'],\n },\n\n // ============ CRM & Sales ============\n {\n id: 'salesforce',\n name: 'Salesforce',\n category: 'crm',\n urlPattern: /salesforce\\.com|force\\.com/i,\n baseURL: 'https://your-instance.salesforce.com/services/data/v58.0',\n docsURL: 'https://developer.salesforce.com/docs/apis',\n commonScopes: ['api', 'refresh_token'],\n },\n {\n id: 'hubspot',\n name: 'HubSpot',\n category: 'crm',\n urlPattern: /api\\.hubapi\\.com|api\\.hubspot\\.com/i,\n baseURL: 'https://api.hubapi.com',\n docsURL: 'https://developers.hubspot.com/docs/api',\n commonScopes: ['crm.objects.contacts.read', 'crm.objects.contacts.write'],\n },\n {\n id: 'pipedrive',\n name: 'Pipedrive',\n category: 'crm',\n urlPattern: /api\\.pipedrive\\.com/i,\n baseURL: 'https://api.pipedrive.com/v1',\n docsURL: 'https://developers.pipedrive.com/docs/api/v1',\n },\n\n // ============ Payments & Finance ============\n {\n id: 'stripe',\n name: 'Stripe',\n category: 'payments',\n urlPattern: /api\\.stripe\\.com/i,\n baseURL: 'https://api.stripe.com/v1',\n docsURL: 'https://stripe.com/docs/api',\n },\n {\n id: 'paypal',\n name: 'PayPal',\n category: 'payments',\n urlPattern: /api\\.paypal\\.com|api-m\\.paypal\\.com/i,\n baseURL: 'https://api-m.paypal.com/v2',\n docsURL: 'https://developer.paypal.com/docs/api/',\n },\n {\n id: 'quickbooks',\n name: 'QuickBooks',\n category: 'payments',\n urlPattern: /quickbooks\\.api\\.intuit\\.com|intuit\\.com.*quickbooks/i,\n baseURL: 'https://quickbooks.api.intuit.com/v3',\n docsURL: 'https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/account',\n commonScopes: ['com.intuit.quickbooks.accounting'],\n },\n {\n id: 'ramp',\n name: 'Ramp',\n category: 'payments',\n urlPattern: /api\\.ramp\\.com/i,\n baseURL: 'https://api.ramp.com/developer/v1',\n docsURL: 'https://docs.ramp.com/reference',\n },\n\n // ============ Cloud Providers ============\n {\n id: 'aws',\n name: 'Amazon Web Services',\n category: 'cloud',\n urlPattern: /amazonaws\\.com/i,\n baseURL: 'https://aws.amazon.com',\n docsURL: 'https://docs.aws.amazon.com/',\n },\n {\n id: 'cloudflare',\n name: 'Cloudflare',\n category: 'cloud',\n urlPattern: /api\\.cloudflare\\.com/i,\n baseURL: 'https://api.cloudflare.com/client/v4',\n docsURL: 'https://developers.cloudflare.com/api/',\n },\n\n // ============ Storage ============\n {\n id: 'dropbox',\n name: 'Dropbox',\n category: 'storage',\n urlPattern: /api\\.dropboxapi\\.com|dropbox\\.com/i,\n baseURL: 'https://api.dropboxapi.com/2',\n docsURL: 'https://www.dropbox.com/developers/documentation',\n commonScopes: ['files.content.read', 'files.content.write'],\n },\n {\n id: 'box',\n name: 'Box',\n category: 'storage',\n urlPattern: /api\\.box\\.com/i,\n baseURL: 'https://api.box.com/2.0',\n docsURL: 'https://developer.box.com/reference/',\n },\n\n // ============ Email ============\n {\n id: 'sendgrid',\n name: 'SendGrid',\n category: 'email',\n urlPattern: /api\\.sendgrid\\.com/i,\n baseURL: 'https://api.sendgrid.com/v3',\n docsURL: 'https://docs.sendgrid.com/api-reference',\n },\n {\n id: 'mailchimp',\n name: 'Mailchimp',\n category: 'email',\n urlPattern: /api\\.mailchimp\\.com|mandrillapp\\.com/i,\n baseURL: 'https://server.api.mailchimp.com/3.0',\n docsURL: 'https://mailchimp.com/developer/marketing/api/',\n },\n {\n id: 'postmark',\n name: 'Postmark',\n category: 'email',\n urlPattern: /api\\.postmarkapp\\.com/i,\n baseURL: 'https://api.postmarkapp.com',\n docsURL: 'https://postmarkapp.com/developer',\n },\n {\n id: 'mailgun',\n name: 'Mailgun',\n category: 'email',\n urlPattern: /api\\.mailgun\\.net|api\\.eu\\.mailgun\\.net/i,\n baseURL: 'https://api.mailgun.net/v3',\n docsURL: 'https://documentation.mailgun.com/docs/mailgun/api-reference/',\n },\n\n // ============ Monitoring & Observability ============\n {\n id: 'datadog',\n name: 'Datadog',\n category: 'monitoring',\n urlPattern: /api\\.datadoghq\\.com/i,\n baseURL: 'https://api.datadoghq.com/api/v2',\n docsURL: 'https://docs.datadoghq.com/api/',\n },\n {\n id: 'pagerduty',\n name: 'PagerDuty',\n category: 'monitoring',\n urlPattern: /api\\.pagerduty\\.com/i,\n baseURL: 'https://api.pagerduty.com',\n docsURL: 'https://developer.pagerduty.com/api-reference/',\n },\n {\n id: 'sentry',\n name: 'Sentry',\n category: 'monitoring',\n urlPattern: /sentry\\.io/i,\n baseURL: 'https://sentry.io/api/0',\n docsURL: 'https://docs.sentry.io/api/',\n },\n\n // ============ Search ============\n {\n id: 'serper',\n name: 'Serper',\n category: 'search',\n urlPattern: /serper\\.dev/i,\n baseURL: 'https://google.serper.dev',\n docsURL: 'https://serper.dev/docs',\n },\n {\n id: 'brave-search',\n name: 'Brave Search',\n category: 'search',\n urlPattern: /api\\.search\\.brave\\.com/i,\n baseURL: 'https://api.search.brave.com/res/v1',\n docsURL: 'https://brave.com/search/api/',\n },\n {\n id: 'tavily',\n name: 'Tavily',\n category: 'search',\n urlPattern: /api\\.tavily\\.com/i,\n baseURL: 'https://api.tavily.com',\n docsURL: 'https://tavily.com/docs',\n },\n {\n id: 'rapidapi-search',\n name: 'RapidAPI Search',\n category: 'search',\n urlPattern: /real-time-web-search\\.p\\.rapidapi\\.com/i,\n baseURL: 'https://real-time-web-search.p.rapidapi.com',\n docsURL: 'https://rapidapi.com/letscrape-6bRBa3QguO5/api/real-time-web-search',\n },\n\n // ============ Scraping ============\n {\n id: 'zenrows',\n name: 'ZenRows',\n category: 'scrape',\n urlPattern: /api\\.zenrows\\.com/i,\n baseURL: 'https://api.zenrows.com/v1',\n docsURL: 'https://docs.zenrows.com/universal-scraper-api/api-reference',\n },\n\n // ============ Other ============\n {\n id: 'twilio',\n name: 'Twilio',\n category: 'other',\n urlPattern: /api\\.twilio\\.com/i,\n baseURL: 'https://api.twilio.com/2010-04-01',\n docsURL: 'https://www.twilio.com/docs/usage/api',\n },\n {\n id: 'zendesk',\n name: 'Zendesk',\n category: 'other',\n urlPattern: /zendesk\\.com/i,\n baseURL: 'https://your-subdomain.zendesk.com/api/v2',\n docsURL: 'https://developer.zendesk.com/api-reference/',\n commonScopes: ['read', 'write'],\n },\n {\n id: 'intercom',\n name: 'Intercom',\n category: 'other',\n urlPattern: /api\\.intercom\\.io/i,\n baseURL: 'https://api.intercom.io',\n docsURL: 'https://developers.intercom.com/docs/',\n },\n {\n id: 'shopify',\n name: 'Shopify',\n category: 'other',\n urlPattern: /shopify\\.com.*admin/i,\n baseURL: 'https://your-store.myshopify.com/admin/api/2024-01',\n docsURL: 'https://shopify.dev/docs/api',\n commonScopes: ['read_products', 'write_products', 'read_orders'],\n },\n] as const;\n\n// ============ Derived Exports (all from SERVICE_DEFINITIONS) ============\n\n/**\n * Service type - union of all service IDs\n */\nexport type ServiceType = (typeof SERVICE_DEFINITIONS)[number]['id'];\n\n/**\n * Services constant object for easy access\n * Usage: Services.Slack, Services.GitHub, etc.\n */\nexport const Services = Object.fromEntries(\n SERVICE_DEFINITIONS.map((def) => [\n // Convert kebab-case to PascalCase for object key\n def.id\n .split('-')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(''),\n def.id,\n ])\n) as { [K in string]: ServiceType };\n\n/**\n * URL patterns for auto-detection (derived from SERVICE_DEFINITIONS)\n */\nexport const SERVICE_URL_PATTERNS: ReadonlyArray<{ service: string; pattern: RegExp }> =\n SERVICE_DEFINITIONS.map((def) => ({\n service: def.id,\n pattern: def.urlPattern,\n }));\n\n/**\n * Service info lookup (derived from SERVICE_DEFINITIONS)\n */\nexport interface ServiceInfo {\n id: string;\n name: string;\n category: ServiceCategory;\n baseURL: string;\n docsURL?: string;\n commonScopes?: string[];\n}\n\n/**\n * Service info map (derived from SERVICE_DEFINITIONS)\n */\nexport const SERVICE_INFO: Record<string, ServiceInfo> = Object.fromEntries(\n SERVICE_DEFINITIONS.map((def) => [\n def.id,\n {\n id: def.id,\n name: def.name,\n category: def.category,\n baseURL: def.baseURL,\n docsURL: def.docsURL,\n commonScopes: def.commonScopes,\n },\n ])\n);\n\n// ============ Utility Functions ============\n\n// Pre-compiled pattern cache for faster detection\nlet compiledPatterns: Array<{ service: string; pattern: RegExp }> | null = null;\n\n/**\n * Get compiled patterns (lazy initialization)\n */\nfunction getCompiledPatterns(): Array<{ service: string; pattern: RegExp }> {\n if (!compiledPatterns) {\n compiledPatterns = SERVICE_DEFINITIONS.map((def) => ({\n service: def.id,\n pattern: def.urlPattern,\n }));\n }\n return compiledPatterns;\n}\n\n/**\n * Detect service type from a URL\n * @param url - Base URL or full URL to check\n * @returns Service type string or undefined if not recognized\n */\nexport function detectServiceFromURL(url: string): string | undefined {\n const patterns = getCompiledPatterns();\n\n for (const { service, pattern } of patterns) {\n if (pattern.test(url)) {\n return service;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get service info by service type\n */\nexport function getServiceInfo(serviceType: string): ServiceInfo | undefined {\n return SERVICE_INFO[serviceType];\n}\n\n/**\n * Get service definition by service type\n */\nexport function getServiceDefinition(serviceType: string): ServiceDefinition | undefined {\n return SERVICE_DEFINITIONS.find((def) => def.id === serviceType);\n}\n\n/**\n * Get all services in a category\n */\nexport function getServicesByCategory(category: ServiceCategory): ServiceDefinition[] {\n return SERVICE_DEFINITIONS.filter((def) => def.category === category);\n}\n\n/**\n * Get all service IDs\n */\nexport function getAllServiceIds(): string[] {\n return SERVICE_DEFINITIONS.map((def) => def.id);\n}\n\n/**\n * Check if a service ID is known\n */\nexport function isKnownService(serviceId: string): boolean {\n return SERVICE_DEFINITIONS.some((def) => def.id === serviceId);\n}\n"]}
1
+ {"version":3,"sources":["../../src/core/Vendor.ts","../../src/domain/entities/Model.ts","../../src/domain/entities/Services.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Supported AI Vendors\n *\n * Use this enum instead of string literals for type safety.\n * These map to specific provider implementations.\n */\nexport const Vendor = {\n OpenAI: 'openai',\n Anthropic: 'anthropic',\n Google: 'google',\n GoogleVertex: 'google-vertex',\n Groq: 'groq',\n Together: 'together',\n Perplexity: 'perplexity',\n Grok: 'grok',\n DeepSeek: 'deepseek',\n Mistral: 'mistral',\n Ollama: 'ollama',\n Custom: 'custom', // OpenAI-compatible endpoint\n} as const;\n\nexport type Vendor = (typeof Vendor)[keyof typeof Vendor];\n\n/**\n * All vendor values as array (useful for validation)\n */\nexport const VENDORS = Object.values(Vendor);\n\n/**\n * Check if a string is a valid vendor\n */\nexport function isVendor(value: string): value is Vendor {\n return VENDORS.includes(value as Vendor);\n}\n","import { Vendor } from '../../core/Vendor.js';\nimport type { Vendor as VendorType } from '../../core/Vendor.js';\n\n/**\n * Complete description of an LLM model including capabilities, pricing, and features\n */\nexport interface ILLMDescription {\n /** Model identifier (e.g., \"gpt-5.2-instant\") */\n name: string;\n\n /** Vendor/provider (Vendor.OpenAI, Vendor.Anthropic, etc.) */\n provider: string;\n\n /** Optional description of the model */\n description?: string;\n\n /** Whether the model is currently available for use */\n isActive: boolean;\n\n /** Whether this model is a preferred/recommended choice for its vendor */\n preferred?: boolean;\n\n /** Release date (YYYY-MM-DD format) */\n releaseDate?: string;\n\n /** Knowledge cutoff date */\n knowledgeCutoff?: string;\n\n /** Model capabilities and pricing */\n features: {\n /** Supports extended reasoning/thinking */\n reasoning?: boolean;\n\n /** Supports streaming responses */\n streaming: boolean;\n\n /** Supports structured output (JSON mode) */\n structuredOutput?: boolean;\n\n /** Supports function/tool calling */\n functionCalling?: boolean;\n\n /** Supports fine-tuning */\n fineTuning?: boolean;\n\n /** Supports predicted outputs */\n predictedOutputs?: boolean;\n\n /** Supports realtime API */\n realtime?: boolean;\n\n /** Supports image input (vision) */\n vision?: boolean;\n\n /** Supports audio input/output */\n audio?: boolean;\n\n /** Supports video input */\n video?: boolean;\n\n /** Supports extended thinking (Claude-specific) */\n extendedThinking?: boolean;\n\n /** Supports batch API */\n batchAPI?: boolean;\n\n /** Supports prompt caching */\n promptCaching?: boolean;\n\n /** Parameter support - indicates which sampling parameters are supported */\n parameters?: {\n /** Supports temperature parameter */\n temperature?: boolean;\n /** Supports top_p parameter */\n topP?: boolean;\n /** Supports frequency_penalty parameter */\n frequencyPenalty?: boolean;\n /** Supports presence_penalty parameter */\n presencePenalty?: boolean;\n };\n\n /** Input specifications */\n input: {\n /** Maximum input context window (in tokens) */\n tokens: number;\n\n /** Supports text input */\n text: boolean;\n\n /** Supports image input */\n image?: boolean;\n\n /** Supports audio input */\n audio?: boolean;\n\n /** Supports video input */\n video?: boolean;\n\n /** Cost per million tokens (input) */\n cpm: number;\n\n /** Cost per million cached tokens (if prompt caching supported) */\n cpmCached?: number;\n };\n\n /** Output specifications */\n output: {\n /** Maximum output tokens */\n tokens: number;\n\n /** Supports text output */\n text: boolean;\n\n /** Supports image output */\n image?: boolean;\n\n /** Supports audio output */\n audio?: boolean;\n\n /** Cost per million tokens (output) */\n cpm: number;\n };\n };\n}\n\n/**\n * Model name constants organized by vendor\n * Updated: March 2026 - Contains only verified, currently available models\n */\nexport const LLM_MODELS = {\n [Vendor.OpenAI]: {\n // GPT-5.3 Series\n GPT_5_3_CODEX: 'gpt-5.3-codex',\n GPT_5_3_CHAT: 'gpt-5.3-chat-latest',\n // GPT-5.2 Series (Current Flagship)\n GPT_5_2: 'gpt-5.2',\n GPT_5_2_PRO: 'gpt-5.2-pro',\n GPT_5_2_CODEX: 'gpt-5.2-codex',\n GPT_5_2_CHAT: 'gpt-5.2-chat-latest',\n // GPT-5.1 Series\n GPT_5_1: 'gpt-5.1',\n GPT_5_1_CODEX: 'gpt-5.1-codex',\n GPT_5_1_CODEX_MAX: 'gpt-5.1-codex-max',\n GPT_5_1_CODEX_MINI: 'gpt-5.1-codex-mini',\n GPT_5_1_CHAT: 'gpt-5.1-chat-latest',\n // GPT-5 Series\n GPT_5: 'gpt-5',\n GPT_5_MINI: 'gpt-5-mini',\n GPT_5_NANO: 'gpt-5-nano',\n GPT_5_CHAT: 'gpt-5-chat-latest',\n // GPT-4.1 Series\n GPT_4_1: 'gpt-4.1',\n GPT_4_1_MINI: 'gpt-4.1-mini',\n GPT_4_1_NANO: 'gpt-4.1-nano',\n // GPT-4o Series (Legacy)\n GPT_4O: 'gpt-4o',\n GPT_4O_MINI: 'gpt-4o-mini',\n // Reasoning Models (o-series)\n O3_MINI: 'o3-mini',\n O1: 'o1',\n },\n [Vendor.Anthropic]: {\n // Claude 4.6 Series (Current)\n CLAUDE_OPUS_4_6: 'claude-opus-4-6',\n CLAUDE_SONNET_4_6: 'claude-sonnet-4-6',\n // Claude 4.5 Series\n CLAUDE_OPUS_4_5: 'claude-opus-4-5-20251101',\n CLAUDE_SONNET_4_5: 'claude-sonnet-4-5-20250929',\n CLAUDE_HAIKU_4_5: 'claude-haiku-4-5-20251001',\n // Claude 4.x Legacy\n CLAUDE_OPUS_4_1: 'claude-opus-4-1-20250805',\n CLAUDE_OPUS_4: 'claude-opus-4-20250514',\n CLAUDE_SONNET_4: 'claude-sonnet-4-20250514',\n CLAUDE_SONNET_3_7: 'claude-3-7-sonnet-20250219',\n // Claude 3.x Legacy (Deprecated)\n CLAUDE_HAIKU_3: 'claude-3-haiku-20240307',\n },\n [Vendor.Google]: {\n // Gemini 3.1 Series (Preview)\n GEMINI_3_1_PRO_PREVIEW: 'gemini-3.1-pro-preview',\n GEMINI_3_1_FLASH_LITE_PREVIEW: 'gemini-3.1-flash-lite-preview',\n GEMINI_3_1_FLASH_IMAGE_PREVIEW: 'gemini-3.1-flash-image-preview',\n // Gemini 3 Series (Preview)\n GEMINI_3_FLASH_PREVIEW: 'gemini-3-flash-preview',\n GEMINI_3_PRO_PREVIEW: 'gemini-3-pro-preview',\n GEMINI_3_PRO_IMAGE_PREVIEW: 'gemini-3-pro-image-preview',\n // Gemini 2.5 Series (Production)\n GEMINI_2_5_PRO: 'gemini-2.5-pro',\n GEMINI_2_5_FLASH: 'gemini-2.5-flash',\n GEMINI_2_5_FLASH_LITE: 'gemini-2.5-flash-lite',\n GEMINI_2_5_FLASH_IMAGE: 'gemini-2.5-flash-image',\n },\n [Vendor.Grok]: {\n // Grok 4.1 Series (2M context, fast)\n GROK_4_1_FAST_REASONING: 'grok-4-1-fast-reasoning',\n GROK_4_1_FAST_NON_REASONING: 'grok-4-1-fast-non-reasoning',\n // Grok 4 Series\n GROK_4_FAST_REASONING: 'grok-4-fast-reasoning',\n GROK_4_FAST_NON_REASONING: 'grok-4-fast-non-reasoning',\n GROK_4_0709: 'grok-4-0709',\n // Grok Code\n GROK_CODE_FAST_1: 'grok-code-fast-1',\n // Grok 3 Series\n GROK_3: 'grok-3',\n GROK_3_MINI: 'grok-3-mini',\n // Grok 2 Series (Vision)\n GROK_2_VISION_1212: 'grok-2-vision-1212',\n },\n} as const;\n\n/**\n * Complete model registry with all model metadata\n * Updated: March 2026 - Verified from official vendor documentation\n */\nexport const MODEL_REGISTRY: Record<string, ILLMDescription> = {\n // ============================================================================\n // OpenAI Models (Verified from platform.openai.com)\n // ============================================================================\n\n // GPT-5.3 Series\n 'gpt-5.3-codex': {\n name: 'gpt-5.3-codex',\n provider: Vendor.OpenAI,\n description: 'Latest codex model for coding and agentic tasks. Reasoning.effort: low, medium, high, xhigh',\n isActive: true,\n releaseDate: '2026-02-01',\n knowledgeCutoff: '2025-08-31',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 1.75,\n cpmCached: 0.175,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 14,\n },\n },\n },\n\n 'gpt-5.3-chat-latest': {\n name: 'gpt-5.3-chat-latest',\n provider: Vendor.OpenAI,\n description: 'Latest GPT-5.3 chat model for general-purpose use',\n isActive: true,\n releaseDate: '2026-02-01',\n knowledgeCutoff: '2025-08-31',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n },\n input: {\n tokens: 128000,\n text: true,\n image: true,\n cpm: 1.75,\n cpmCached: 0.175,\n },\n output: {\n tokens: 16000,\n text: true,\n cpm: 14,\n },\n },\n },\n\n // GPT-5.2 Series (Current Flagship)\n 'gpt-5.2': {\n name: 'gpt-5.2',\n provider: Vendor.OpenAI,\n description: 'Flagship model for coding and agentic tasks. Reasoning.effort: none, low, medium, high, xhigh',\n isActive: true,\n preferred: true,\n releaseDate: '2025-12-01',\n knowledgeCutoff: '2025-08-31',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 1.75,\n cpmCached: 0.175,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 14,\n },\n },\n },\n\n 'gpt-5.2-pro': {\n name: 'gpt-5.2-pro',\n provider: Vendor.OpenAI,\n description: 'GPT-5.2 pro produces smarter and more precise responses. Reasoning.effort: medium, high, xhigh',\n isActive: true,\n releaseDate: '2025-12-01',\n knowledgeCutoff: '2025-08-31',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: false,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 21,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 168,\n },\n },\n },\n\n 'gpt-5.2-codex': {\n name: 'gpt-5.2-codex',\n provider: Vendor.OpenAI,\n description: 'GPT-5.2 codex for coding and agentic tasks. Reasoning.effort: low, medium, high, xhigh',\n isActive: true,\n preferred: true,\n releaseDate: '2025-12-01',\n knowledgeCutoff: '2025-08-31',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 1.75,\n cpmCached: 0.175,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 14,\n },\n },\n },\n\n 'gpt-5.2-chat-latest': {\n name: 'gpt-5.2-chat-latest',\n provider: Vendor.OpenAI,\n description: 'GPT-5.2 chat model for general-purpose use',\n isActive: true,\n releaseDate: '2025-12-01',\n knowledgeCutoff: '2025-08-31',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 128000,\n text: true,\n image: true,\n cpm: 1.75,\n cpmCached: 0.175,\n },\n output: {\n tokens: 16000,\n text: true,\n cpm: 14,\n },\n },\n },\n\n // GPT-5.1 Series\n 'gpt-5.1': {\n name: 'gpt-5.1',\n provider: Vendor.OpenAI,\n description: 'Intelligent reasoning model for coding and agentic tasks. Reasoning.effort: none, low, medium, high',\n isActive: true,\n releaseDate: '2025-10-01',\n knowledgeCutoff: '2024-09-30',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 1.25,\n cpmCached: 0.125,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 10,\n },\n },\n },\n\n 'gpt-5.1-codex': {\n name: 'gpt-5.1-codex',\n provider: Vendor.OpenAI,\n description: 'GPT-5.1 codex for coding and agentic tasks with reasoning',\n isActive: true,\n releaseDate: '2025-10-01',\n knowledgeCutoff: '2024-09-30',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 1.25,\n cpmCached: 0.125,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 10,\n },\n },\n },\n\n 'gpt-5.1-codex-max': {\n name: 'gpt-5.1-codex-max',\n provider: Vendor.OpenAI,\n description: 'GPT-5.1 codex max for maximum reasoning depth on coding tasks',\n isActive: true,\n releaseDate: '2025-10-01',\n knowledgeCutoff: '2024-09-30',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 1.25,\n cpmCached: 0.125,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 10,\n },\n },\n },\n\n 'gpt-5.1-codex-mini': {\n name: 'gpt-5.1-codex-mini',\n provider: Vendor.OpenAI,\n description: 'GPT-5.1 codex mini for cost-efficient coding tasks',\n isActive: true,\n releaseDate: '2025-10-01',\n knowledgeCutoff: '2024-09-30',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 0.25,\n cpmCached: 0.025,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 2,\n },\n },\n },\n\n 'gpt-5.1-chat-latest': {\n name: 'gpt-5.1-chat-latest',\n provider: Vendor.OpenAI,\n description: 'GPT-5.1 chat model for general-purpose use',\n isActive: true,\n releaseDate: '2025-10-01',\n knowledgeCutoff: '2024-09-30',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 128000,\n text: true,\n image: true,\n cpm: 1.25,\n cpmCached: 0.125,\n },\n output: {\n tokens: 16000,\n text: true,\n cpm: 10,\n },\n },\n },\n\n // GPT-5 Series\n 'gpt-5': {\n name: 'gpt-5',\n provider: Vendor.OpenAI,\n description: 'Previous intelligent reasoning model for coding and agentic tasks. Reasoning.effort: minimal, low, medium, high',\n isActive: true,\n releaseDate: '2025-08-01',\n knowledgeCutoff: '2024-09-30',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 1.25,\n cpmCached: 0.125,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 10,\n },\n },\n },\n\n 'gpt-5-mini': {\n name: 'gpt-5-mini',\n provider: Vendor.OpenAI,\n description: 'Faster, cost-efficient version of GPT-5 for well-defined tasks and precise prompts',\n isActive: true,\n releaseDate: '2025-08-01',\n knowledgeCutoff: '2024-05-31',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 0.25,\n cpmCached: 0.025,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 2,\n },\n },\n },\n\n 'gpt-5-nano': {\n name: 'gpt-5-nano',\n provider: Vendor.OpenAI,\n description: 'Fastest, most cost-efficient GPT-5. Great for summarization and classification tasks',\n isActive: true,\n releaseDate: '2025-08-01',\n knowledgeCutoff: '2024-05-31',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 400000,\n text: true,\n image: true,\n cpm: 0.05,\n cpmCached: 0.005,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 0.4,\n },\n },\n },\n\n 'gpt-5-chat-latest': {\n name: 'gpt-5-chat-latest',\n provider: Vendor.OpenAI,\n description: 'GPT-5 chat model for general-purpose use',\n isActive: true,\n releaseDate: '2025-08-01',\n knowledgeCutoff: '2024-09-30',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 128000,\n text: true,\n image: true,\n cpm: 1.25,\n cpmCached: 0.125,\n },\n output: {\n tokens: 16000,\n text: true,\n cpm: 10,\n },\n },\n },\n\n // GPT-4.1 Series\n 'gpt-4.1': {\n name: 'gpt-4.1',\n provider: Vendor.OpenAI,\n description: 'GPT-4.1 specialized for coding with 1M token context window',\n isActive: true,\n releaseDate: '2025-04-14',\n knowledgeCutoff: '2024-06-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1000000,\n text: true,\n image: true,\n cpm: 2,\n cpmCached: 0.50,\n },\n output: {\n tokens: 32768,\n text: true,\n cpm: 8,\n },\n },\n },\n\n 'gpt-4.1-mini': {\n name: 'gpt-4.1-mini',\n provider: Vendor.OpenAI,\n description: 'Efficient GPT-4.1 model, beats GPT-4o in many benchmarks at 83% lower cost',\n isActive: true,\n releaseDate: '2025-04-14',\n knowledgeCutoff: '2024-06-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1000000,\n text: true,\n image: true,\n cpm: 0.4,\n cpmCached: 0.10,\n },\n output: {\n tokens: 16384,\n text: true,\n cpm: 1.6,\n },\n },\n },\n\n 'gpt-4.1-nano': {\n name: 'gpt-4.1-nano',\n provider: Vendor.OpenAI,\n description: 'Fastest and cheapest model with 1M context. 80.1% MMLU, ideal for classification/autocompletion',\n isActive: true,\n releaseDate: '2025-04-14',\n knowledgeCutoff: '2024-06-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1000000,\n text: true,\n image: true,\n cpm: 0.1,\n cpmCached: 0.025,\n },\n output: {\n tokens: 16384,\n text: true,\n cpm: 0.4,\n },\n },\n },\n\n // GPT-4o Series (Legacy)\n 'gpt-4o': {\n name: 'gpt-4o',\n provider: Vendor.OpenAI,\n description: 'Versatile omni model. Legacy but still available',\n isActive: true,\n releaseDate: '2024-05-13',\n knowledgeCutoff: '2023-10-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: true,\n realtime: true,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 128000,\n text: true,\n image: true,\n cpm: 2.5,\n cpmCached: 1.25,\n },\n output: {\n tokens: 16384,\n text: true,\n cpm: 10,\n },\n },\n },\n\n 'gpt-4o-mini': {\n name: 'gpt-4o-mini',\n provider: Vendor.OpenAI,\n description: 'Fast, affordable omni model',\n isActive: true,\n releaseDate: '2024-07-18',\n knowledgeCutoff: '2023-10-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: true,\n predictedOutputs: false,\n realtime: true,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 128000,\n text: true,\n image: true,\n cpm: 0.15,\n cpmCached: 0.075,\n },\n output: {\n tokens: 16384,\n text: true,\n cpm: 0.6,\n },\n },\n },\n\n // Reasoning Models (o-series)\n 'o3-mini': {\n name: 'o3-mini',\n provider: Vendor.OpenAI,\n description: 'Fast reasoning model tailored for coding, math, and science',\n isActive: true,\n releaseDate: '2025-01-31',\n knowledgeCutoff: '2023-10-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: false,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 200000,\n text: true,\n cpm: 1.1,\n cpmCached: 0.55,\n },\n output: {\n tokens: 100000,\n text: true,\n cpm: 4.4,\n },\n },\n },\n\n 'o1': {\n name: 'o1',\n provider: Vendor.OpenAI,\n description: 'Advanced reasoning model for complex problems',\n isActive: true,\n releaseDate: '2024-12-17',\n knowledgeCutoff: '2023-10-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n parameters: {\n temperature: false,\n topP: false,\n frequencyPenalty: false,\n presencePenalty: false,\n },\n input: {\n tokens: 200000,\n text: true,\n image: true,\n cpm: 15,\n cpmCached: 7.50,\n },\n output: {\n tokens: 100000,\n text: true,\n cpm: 60,\n },\n },\n },\n\n // ============================================================================\n // Anthropic Models (Verified from platform.claude.com - March 2026)\n // ============================================================================\n\n // Claude 4.6 Series (Current)\n 'claude-opus-4-6': {\n name: 'claude-opus-4-6',\n provider: Vendor.Anthropic,\n description: 'The most intelligent model for building agents and coding. 128K output, adaptive thinking',\n isActive: true,\n preferred: true,\n releaseDate: '2026-02-01',\n knowledgeCutoff: '2025-05-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000, // 1M with beta header\n text: true,\n image: true,\n cpm: 5,\n cpmCached: 0.5,\n },\n output: {\n tokens: 128000,\n text: true,\n cpm: 25,\n },\n },\n },\n\n 'claude-sonnet-4-6': {\n name: 'claude-sonnet-4-6',\n provider: Vendor.Anthropic,\n description: 'Best combination of speed and intelligence. Adaptive thinking, 1M context beta',\n isActive: true,\n preferred: true,\n releaseDate: '2026-02-01',\n knowledgeCutoff: '2025-08-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000, // 1M with beta header\n text: true,\n image: true,\n cpm: 3,\n cpmCached: 0.3,\n },\n output: {\n tokens: 64000,\n text: true,\n cpm: 15,\n },\n },\n },\n\n // Claude 4.5 Series\n 'claude-opus-4-5-20251101': {\n name: 'claude-opus-4-5-20251101',\n provider: Vendor.Anthropic,\n description: 'Legacy Opus 4.5. Premium model combining maximum intelligence with practical performance',\n isActive: true,\n releaseDate: '2025-11-01',\n knowledgeCutoff: '2025-05-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000,\n text: true,\n image: true,\n cpm: 5,\n cpmCached: 0.5,\n },\n output: {\n tokens: 64000,\n text: true,\n cpm: 25,\n },\n },\n },\n\n 'claude-sonnet-4-5-20250929': {\n name: 'claude-sonnet-4-5-20250929',\n provider: Vendor.Anthropic,\n description: 'Legacy Sonnet 4.5. Smart model for complex agents and coding',\n isActive: true,\n releaseDate: '2025-09-29',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000, // 1M with beta header\n text: true,\n image: true,\n cpm: 3,\n cpmCached: 0.3,\n },\n output: {\n tokens: 64000,\n text: true,\n cpm: 15,\n },\n },\n },\n\n 'claude-haiku-4-5-20251001': {\n name: 'claude-haiku-4-5-20251001',\n provider: Vendor.Anthropic,\n description: 'Fastest model with near-frontier intelligence. Matches Sonnet 4 on coding',\n isActive: true,\n releaseDate: '2025-10-01',\n knowledgeCutoff: '2025-02-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000,\n text: true,\n image: true,\n cpm: 1,\n cpmCached: 0.1,\n },\n output: {\n tokens: 64000,\n text: true,\n cpm: 5,\n },\n },\n },\n\n // Claude 4.x Legacy\n 'claude-opus-4-1-20250805': {\n name: 'claude-opus-4-1-20250805',\n provider: Vendor.Anthropic,\n description: 'Legacy Opus 4.1 focused on agentic tasks, real-world coding, and reasoning',\n isActive: true,\n releaseDate: '2025-08-05',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000,\n text: true,\n image: true,\n cpm: 15,\n cpmCached: 1.5,\n },\n output: {\n tokens: 32000,\n text: true,\n cpm: 75,\n },\n },\n },\n\n 'claude-opus-4-20250514': {\n name: 'claude-opus-4-20250514',\n provider: Vendor.Anthropic,\n description: 'Legacy Opus 4. Agentic tasks and reasoning',\n isActive: true,\n releaseDate: '2025-05-14',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000,\n text: true,\n image: true,\n cpm: 15,\n cpmCached: 1.5,\n },\n output: {\n tokens: 32000,\n text: true,\n cpm: 75,\n },\n },\n },\n\n 'claude-sonnet-4-20250514': {\n name: 'claude-sonnet-4-20250514',\n provider: Vendor.Anthropic,\n description: 'Legacy Sonnet 4. Supports 1M context beta',\n isActive: true,\n releaseDate: '2025-05-14',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000, // 1M with beta header\n text: true,\n image: true,\n cpm: 3,\n cpmCached: 0.3,\n },\n output: {\n tokens: 64000,\n text: true,\n cpm: 15,\n },\n },\n },\n\n 'claude-3-7-sonnet-20250219': {\n name: 'claude-3-7-sonnet-20250219',\n provider: Vendor.Anthropic,\n description: 'Deprecated. Claude 3.7 Sonnet with extended thinking',\n isActive: true,\n releaseDate: '2025-02-19',\n knowledgeCutoff: '2024-10-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000,\n text: true,\n image: true,\n cpm: 3,\n cpmCached: 0.3,\n },\n output: {\n tokens: 64000,\n text: true,\n cpm: 15,\n },\n },\n },\n\n // Claude 3.x Legacy (Deprecated - retiring April 19, 2026)\n 'claude-3-haiku-20240307': {\n name: 'claude-3-haiku-20240307',\n provider: Vendor.Anthropic,\n description: 'Deprecated. Retiring April 19, 2026. Migrate to Haiku 4.5',\n isActive: true,\n releaseDate: '2024-03-07',\n knowledgeCutoff: '2023-08-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n extendedThinking: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 200000,\n text: true,\n image: true,\n cpm: 0.25,\n cpmCached: 0.03,\n },\n output: {\n tokens: 4096,\n text: true,\n cpm: 1.25,\n },\n },\n },\n\n // ============================================================================\n // Google Models (Verified from ai.google.dev - March 2026)\n // ============================================================================\n\n // Gemini 3.1 Series (Preview)\n 'gemini-3.1-pro-preview': {\n name: 'gemini-3.1-pro-preview',\n provider: Vendor.Google,\n description: 'Advanced intelligence with powerful agentic and coding capabilities. Replaces gemini-3-pro-preview',\n isActive: true,\n preferred: true,\n releaseDate: '2026-02-01',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: true,\n video: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1048576,\n text: true,\n image: true,\n audio: true,\n video: true,\n cpm: 2.00,\n cpmCached: 0.20,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 12.00,\n },\n },\n },\n\n 'gemini-3.1-flash-lite-preview': {\n name: 'gemini-3.1-flash-lite-preview',\n provider: Vendor.Google,\n description: 'High performance, budget-friendly for high-volume agentic tasks and data extraction',\n isActive: true,\n releaseDate: '2026-03-01',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: true,\n video: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1048576,\n text: true,\n image: true,\n audio: true,\n video: true,\n cpm: 0.25,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 1.50,\n },\n },\n },\n\n 'gemini-3.1-flash-image-preview': {\n name: 'gemini-3.1-flash-image-preview',\n provider: Vendor.Google,\n description: 'High-efficiency image generation with up to 4K output, search grounding support',\n isActive: true,\n releaseDate: '2026-02-01',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: false,\n functionCalling: false,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: false,\n input: {\n tokens: 131072,\n text: true,\n image: true,\n cpm: 0.25,\n },\n output: {\n tokens: 32768,\n text: true,\n image: true,\n cpm: 1.50,\n },\n },\n },\n\n // Gemini 3 Series (Preview)\n 'gemini-3-flash-preview': {\n name: 'gemini-3-flash-preview',\n provider: Vendor.Google,\n description: 'Most powerful agentic and coding model with frontier-class reasoning',\n isActive: true,\n preferred: true,\n releaseDate: '2025-12-01',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: true,\n video: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1048576,\n text: true,\n image: true,\n audio: true,\n video: true,\n cpm: 0.50,\n cpmCached: 0.05,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 3.00,\n },\n },\n },\n\n 'gemini-3-pro-preview': {\n name: 'gemini-3-pro-preview',\n provider: Vendor.Google,\n description: 'Deprecated. Shutting down March 9, 2026. Migrate to gemini-3.1-pro-preview',\n isActive: true,\n releaseDate: '2025-11-18',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: true,\n video: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1048576,\n text: true,\n image: true,\n audio: true,\n video: true,\n cpm: 1.25,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 10,\n },\n },\n },\n\n 'gemini-3-pro-image-preview': {\n name: 'gemini-3-pro-image-preview',\n provider: Vendor.Google,\n description: 'Professional-grade image generation and editing with reasoning',\n isActive: true,\n releaseDate: '2025-11-18',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: false,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: false,\n input: {\n tokens: 65536,\n text: true,\n image: true,\n cpm: 1.25,\n },\n output: {\n tokens: 32768,\n text: true,\n image: true,\n cpm: 10,\n },\n },\n },\n\n // Gemini 2.5 Series (Production)\n 'gemini-2.5-pro': {\n name: 'gemini-2.5-pro',\n provider: Vendor.Google,\n description: 'Most advanced model for complex tasks with deep reasoning and coding',\n isActive: true,\n releaseDate: '2025-03-01',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: true,\n video: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1048576,\n text: true,\n image: true,\n audio: true,\n video: true,\n cpm: 1.25,\n cpmCached: 0.125,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 10,\n },\n },\n },\n\n 'gemini-2.5-flash': {\n name: 'gemini-2.5-flash',\n provider: Vendor.Google,\n description: 'Best price-performance for low-latency, high-volume tasks with reasoning',\n isActive: true,\n releaseDate: '2025-06-17',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: true,\n video: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1048576,\n text: true,\n image: true,\n audio: true,\n video: true,\n cpm: 0.30,\n cpmCached: 0.03,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 2.50,\n },\n },\n },\n\n 'gemini-2.5-flash-lite': {\n name: 'gemini-2.5-flash-lite',\n provider: Vendor.Google,\n description: 'Fastest and most budget-friendly multimodal model in the 2.5 family',\n isActive: true,\n releaseDate: '2025-06-17',\n knowledgeCutoff: '2025-01-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: true,\n video: true,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 1048576,\n text: true,\n image: true,\n audio: true,\n video: true,\n cpm: 0.10,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 0.40,\n },\n },\n },\n\n 'gemini-2.5-flash-image': {\n name: 'gemini-2.5-flash-image',\n provider: Vendor.Google,\n description: 'Fast native image generation and editing (Nano Banana)',\n isActive: true,\n releaseDate: '2025-10-01',\n knowledgeCutoff: '2025-06-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: false,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 65536,\n text: true,\n image: true,\n cpm: 0.15,\n },\n output: {\n tokens: 32768,\n text: true,\n image: true,\n cpm: 0.6,\n },\n },\n },\n\n // ============================================================================\n // xAI Grok Models (Verified from docs.x.ai - March 2026)\n // ============================================================================\n\n // Grok 4.1 Series (2M context, fast)\n 'grok-4-1-fast-reasoning': {\n name: 'grok-4-1-fast-reasoning',\n provider: Vendor.Grok,\n description: 'Fast Grok 4.1 with reasoning capabilities, 2M context window, vision support',\n isActive: true,\n releaseDate: '2025-11-01',\n knowledgeCutoff: '2024-11-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 2000000,\n text: true,\n image: true,\n cpm: 0.20,\n cpmCached: 0.05,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 0.50,\n },\n },\n },\n\n 'grok-4-1-fast-non-reasoning': {\n name: 'grok-4-1-fast-non-reasoning',\n provider: Vendor.Grok,\n description: 'Fast Grok 4.1 without reasoning, 2M context window, vision support',\n isActive: true,\n releaseDate: '2025-11-01',\n knowledgeCutoff: '2024-11-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 2000000,\n text: true,\n image: true,\n cpm: 0.20,\n cpmCached: 0.05,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 0.50,\n },\n },\n },\n\n // Grok Code Series\n 'grok-code-fast-1': {\n name: 'grok-code-fast-1',\n provider: Vendor.Grok,\n description: 'Specialized coding model with reasoning capabilities, 256K context',\n isActive: true,\n releaseDate: '2025-10-01',\n knowledgeCutoff: '2024-11-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: false,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 256000,\n text: true,\n cpm: 0.20,\n cpmCached: 0.02,\n },\n output: {\n tokens: 32768,\n text: true,\n cpm: 1.50,\n },\n },\n },\n\n // Grok 4 Series\n 'grok-4-fast-reasoning': {\n name: 'grok-4-fast-reasoning',\n provider: Vendor.Grok,\n description: 'Fast Grok 4 with reasoning capabilities, 2M context window, vision support',\n isActive: true,\n releaseDate: '2025-09-01',\n knowledgeCutoff: '2024-11-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 2000000,\n text: true,\n image: true,\n cpm: 0.20,\n cpmCached: 0.05,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 0.50,\n },\n },\n },\n\n 'grok-4-fast-non-reasoning': {\n name: 'grok-4-fast-non-reasoning',\n provider: Vendor.Grok,\n description: 'Fast Grok 4 without reasoning, 2M context window, vision support',\n isActive: true,\n releaseDate: '2025-09-01',\n knowledgeCutoff: '2024-11-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 2000000,\n text: true,\n image: true,\n cpm: 0.20,\n cpmCached: 0.05,\n },\n output: {\n tokens: 65536,\n text: true,\n cpm: 0.50,\n },\n },\n },\n\n 'grok-4-0709': {\n name: 'grok-4-0709',\n provider: Vendor.Grok,\n description: 'Grok 4 flagship model (July 2025 release), 256K context, vision support, reasoning',\n isActive: true,\n releaseDate: '2025-07-09',\n knowledgeCutoff: '2024-11-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 256000,\n text: true,\n image: true,\n cpm: 3.00,\n cpmCached: 0.75,\n },\n output: {\n tokens: 32768,\n text: true,\n cpm: 15.00,\n },\n },\n },\n\n // Grok 3 Series\n 'grok-3-mini': {\n name: 'grok-3-mini',\n provider: Vendor.Grok,\n description: 'Lightweight, cost-efficient model with reasoning, 131K context',\n isActive: true,\n releaseDate: '2025-06-01',\n knowledgeCutoff: '2024-11-01',\n features: {\n reasoning: true,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: false,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 131072,\n text: true,\n cpm: 0.30,\n cpmCached: 0.07,\n },\n output: {\n tokens: 32768,\n text: true,\n cpm: 0.50,\n },\n },\n },\n\n 'grok-3': {\n name: 'grok-3',\n provider: Vendor.Grok,\n description: 'Production model for general-purpose tasks, 131K context',\n isActive: true,\n releaseDate: '2025-06-01',\n knowledgeCutoff: '2024-11-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: false,\n audio: false,\n video: false,\n batchAPI: true,\n promptCaching: true,\n input: {\n tokens: 131072,\n text: true,\n cpm: 3.00,\n cpmCached: 0.75,\n },\n output: {\n tokens: 32768,\n text: true,\n cpm: 15.00,\n },\n },\n },\n\n // Grok 2 Series (Legacy - not in current docs)\n 'grok-2-vision-1212': {\n name: 'grok-2-vision-1212',\n provider: Vendor.Grok,\n description: 'Legacy vision model for image understanding, 32K context. Not in current xAI docs',\n isActive: true,\n releaseDate: '2024-12-12',\n knowledgeCutoff: '2024-11-01',\n features: {\n reasoning: false,\n streaming: true,\n structuredOutput: true,\n functionCalling: true,\n fineTuning: false,\n predictedOutputs: false,\n realtime: false,\n vision: true,\n audio: false,\n video: false,\n batchAPI: false,\n promptCaching: false,\n input: {\n tokens: 32768,\n text: true,\n image: true,\n cpm: 2.00,\n },\n output: {\n tokens: 8192,\n text: true,\n cpm: 10.00,\n },\n },\n },\n};\n\n/**\n * Get model information by name\n * @param modelName The model identifier\n * @returns Model description or undefined if not found\n */\nexport function getModelInfo(modelName: string): ILLMDescription | undefined {\n return MODEL_REGISTRY[modelName];\n}\n\n/**\n * Get all models for a specific vendor\n * @param vendor The vendor to filter by\n * @returns Array of model descriptions for the vendor\n */\nexport function getModelsByVendor(vendor: VendorType): ILLMDescription[] {\n return Object.values(MODEL_REGISTRY).filter((model) => model.provider === vendor);\n}\n\n/**\n * Get all currently active models\n * @returns Array of active model descriptions\n */\nexport function getActiveModels(): ILLMDescription[] {\n return Object.values(MODEL_REGISTRY).filter((model) => model.isActive);\n}\n\n/**\n * Calculate the cost for a given model and token usage\n * @param model Model name\n * @param inputTokens Number of input tokens\n * @param outputTokens Number of output tokens\n * @param options Optional calculation options\n * @returns Total cost in dollars, or null if model not found\n */\nexport function calculateCost(\n model: string,\n inputTokens: number,\n outputTokens: number,\n options?: { useCachedInput?: boolean }\n): number | null {\n const modelInfo = getModelInfo(model);\n if (!modelInfo) {\n return null;\n }\n\n const inputCPM = options?.useCachedInput && modelInfo.features.input.cpmCached !== undefined\n ? modelInfo.features.input.cpmCached\n : modelInfo.features.input.cpm;\n\n const outputCPM = modelInfo.features.output.cpm;\n\n const inputCost = (inputTokens / 1_000_000) * inputCPM;\n const outputCost = (outputTokens / 1_000_000) * outputCPM;\n\n return inputCost + outputCost;\n}\n","/**\n * Services - Single source of truth for external service definitions\n *\n * All service metadata is defined in one place (SERVICE_DEFINITIONS).\n * Other exports are derived from this to maintain DRY principles.\n */\n\n/**\n * Service category type\n */\nexport type ServiceCategory =\n | 'major-vendors'\n | 'communication'\n | 'development'\n | 'productivity'\n | 'crm'\n | 'payments'\n | 'cloud'\n | 'storage'\n | 'email'\n | 'monitoring'\n | 'search'\n | 'scrape'\n | 'other';\n\n/**\n * Complete service definition - single source of truth\n */\nexport interface ServiceDefinition {\n /** Unique identifier (e.g., 'slack', 'github') */\n id: string;\n /** Human-readable name (e.g., 'Slack', 'GitHub') */\n name: string;\n /** Service category */\n category: ServiceCategory;\n /** URL pattern for auto-detection from baseURL */\n urlPattern: RegExp;\n /** Default base URL for API calls */\n baseURL: string;\n /** Documentation URL */\n docsURL?: string;\n /** Common OAuth scopes */\n commonScopes?: string[];\n}\n\n/**\n * Master list of all service definitions\n * This is the SINGLE SOURCE OF TRUTH - all other exports derive from this\n */\nexport const SERVICE_DEFINITIONS: readonly ServiceDefinition[] = [\n // ============ Major Vendors ============\n {\n id: 'microsoft',\n name: 'Microsoft',\n category: 'major-vendors',\n urlPattern: /graph\\.microsoft\\.com|login\\.microsoftonline\\.com/i,\n baseURL: 'https://graph.microsoft.com/v1.0',\n docsURL: 'https://learn.microsoft.com/en-us/graph/',\n commonScopes: ['User.Read', 'Files.ReadWrite', 'Mail.Read', 'Calendars.ReadWrite'],\n },\n {\n id: 'google',\n name: 'Google',\n category: 'major-vendors',\n urlPattern: /googleapis\\.com|accounts\\.google\\.com/i,\n baseURL: 'https://www.googleapis.com',\n docsURL: 'https://developers.google.com/',\n commonScopes: [\n 'https://www.googleapis.com/auth/drive',\n 'https://www.googleapis.com/auth/calendar',\n 'https://www.googleapis.com/auth/gmail.readonly',\n ],\n },\n\n // ============ Communication ============\n {\n id: 'slack',\n name: 'Slack',\n category: 'communication',\n urlPattern: /slack\\.com/i,\n baseURL: 'https://slack.com/api',\n docsURL: 'https://api.slack.com/methods',\n commonScopes: ['chat:write', 'channels:read', 'users:read'],\n },\n {\n id: 'discord',\n name: 'Discord',\n category: 'communication',\n urlPattern: /discord\\.com|discordapp\\.com/i,\n baseURL: 'https://discord.com/api/v10',\n docsURL: 'https://discord.com/developers/docs',\n commonScopes: ['bot', 'messages.read'],\n },\n {\n id: 'telegram',\n name: 'Telegram',\n category: 'communication',\n urlPattern: /api\\.telegram\\.org/i,\n baseURL: 'https://api.telegram.org',\n docsURL: 'https://core.telegram.org/bots/api',\n },\n {\n id: 'twitter',\n name: 'X (Twitter)',\n category: 'communication',\n urlPattern: /api\\.x\\.com|api\\.twitter\\.com/i,\n baseURL: 'https://api.x.com/2',\n docsURL: 'https://developer.x.com/en/docs/x-api',\n commonScopes: ['tweet.read', 'tweet.write', 'users.read', 'offline.access'],\n },\n\n // ============ Development & Project Management ============\n {\n id: 'github',\n name: 'GitHub',\n category: 'development',\n urlPattern: /api\\.github\\.com/i,\n baseURL: 'https://api.github.com',\n docsURL: 'https://docs.github.com/en/rest',\n commonScopes: ['repo', 'read:user', 'read:org'],\n },\n {\n id: 'gitlab',\n name: 'GitLab',\n category: 'development',\n urlPattern: /gitlab\\.com|gitlab\\./i,\n baseURL: 'https://gitlab.com/api/v4',\n docsURL: 'https://docs.gitlab.com/ee/api/',\n commonScopes: ['api', 'read_user', 'read_repository'],\n },\n {\n id: 'bitbucket',\n name: 'Bitbucket',\n category: 'development',\n urlPattern: /api\\.bitbucket\\.org|bitbucket\\.org/i,\n baseURL: 'https://api.bitbucket.org/2.0',\n docsURL: 'https://developer.atlassian.com/cloud/bitbucket/rest/',\n commonScopes: ['repository', 'pullrequest'],\n },\n {\n id: 'jira',\n name: 'Jira',\n category: 'development',\n urlPattern: /atlassian\\.net.*jira|jira\\./i,\n baseURL: 'https://your-domain.atlassian.net/rest/api/3',\n docsURL: 'https://developer.atlassian.com/cloud/jira/platform/rest/v3/',\n commonScopes: ['read:jira-work', 'write:jira-work'],\n },\n {\n id: 'linear',\n name: 'Linear',\n category: 'development',\n urlPattern: /api\\.linear\\.app/i,\n baseURL: 'https://api.linear.app/graphql',\n docsURL: 'https://developers.linear.app/docs',\n commonScopes: ['read', 'write'],\n },\n {\n id: 'asana',\n name: 'Asana',\n category: 'development',\n urlPattern: /api\\.asana\\.com/i,\n baseURL: 'https://app.asana.com/api/1.0',\n docsURL: 'https://developers.asana.com/docs',\n },\n {\n id: 'trello',\n name: 'Trello',\n category: 'development',\n urlPattern: /api\\.trello\\.com/i,\n baseURL: 'https://api.trello.com/1',\n docsURL: 'https://developer.atlassian.com/cloud/trello/rest/',\n commonScopes: ['read', 'write'],\n },\n\n // ============ Productivity & Collaboration ============\n {\n id: 'notion',\n name: 'Notion',\n category: 'productivity',\n urlPattern: /api\\.notion\\.com/i,\n baseURL: 'https://api.notion.com/v1',\n docsURL: 'https://developers.notion.com/reference',\n },\n {\n id: 'airtable',\n name: 'Airtable',\n category: 'productivity',\n urlPattern: /api\\.airtable\\.com/i,\n baseURL: 'https://api.airtable.com/v0',\n docsURL: 'https://airtable.com/developers/web/api',\n commonScopes: ['data.records:read', 'data.records:write'],\n },\n {\n id: 'confluence',\n name: 'Confluence',\n category: 'productivity',\n urlPattern: /atlassian\\.net.*wiki|confluence\\./i,\n baseURL: 'https://your-domain.atlassian.net/wiki/rest/api',\n docsURL: 'https://developer.atlassian.com/cloud/confluence/rest/',\n commonScopes: ['read:confluence-content.all', 'write:confluence-content'],\n },\n\n // ============ CRM & Sales ============\n {\n id: 'salesforce',\n name: 'Salesforce',\n category: 'crm',\n urlPattern: /salesforce\\.com|force\\.com/i,\n baseURL: 'https://your-instance.salesforce.com/services/data/v58.0',\n docsURL: 'https://developer.salesforce.com/docs/apis',\n commonScopes: ['api', 'refresh_token'],\n },\n {\n id: 'hubspot',\n name: 'HubSpot',\n category: 'crm',\n urlPattern: /api\\.hubapi\\.com|api\\.hubspot\\.com/i,\n baseURL: 'https://api.hubapi.com',\n docsURL: 'https://developers.hubspot.com/docs/api',\n commonScopes: ['crm.objects.contacts.read', 'crm.objects.contacts.write'],\n },\n {\n id: 'pipedrive',\n name: 'Pipedrive',\n category: 'crm',\n urlPattern: /api\\.pipedrive\\.com/i,\n baseURL: 'https://api.pipedrive.com/v1',\n docsURL: 'https://developers.pipedrive.com/docs/api/v1',\n },\n\n // ============ Payments & Finance ============\n {\n id: 'stripe',\n name: 'Stripe',\n category: 'payments',\n urlPattern: /api\\.stripe\\.com/i,\n baseURL: 'https://api.stripe.com/v1',\n docsURL: 'https://stripe.com/docs/api',\n },\n {\n id: 'paypal',\n name: 'PayPal',\n category: 'payments',\n urlPattern: /api\\.paypal\\.com|api-m\\.paypal\\.com/i,\n baseURL: 'https://api-m.paypal.com/v2',\n docsURL: 'https://developer.paypal.com/docs/api/',\n },\n {\n id: 'quickbooks',\n name: 'QuickBooks',\n category: 'payments',\n urlPattern: /quickbooks\\.api\\.intuit\\.com|intuit\\.com.*quickbooks/i,\n baseURL: 'https://quickbooks.api.intuit.com/v3',\n docsURL: 'https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/account',\n commonScopes: ['com.intuit.quickbooks.accounting'],\n },\n {\n id: 'ramp',\n name: 'Ramp',\n category: 'payments',\n urlPattern: /api\\.ramp\\.com/i,\n baseURL: 'https://api.ramp.com/developer/v1',\n docsURL: 'https://docs.ramp.com/reference',\n },\n\n // ============ Cloud Providers ============\n {\n id: 'aws',\n name: 'Amazon Web Services',\n category: 'cloud',\n urlPattern: /amazonaws\\.com/i,\n baseURL: 'https://aws.amazon.com',\n docsURL: 'https://docs.aws.amazon.com/',\n },\n {\n id: 'cloudflare',\n name: 'Cloudflare',\n category: 'cloud',\n urlPattern: /api\\.cloudflare\\.com/i,\n baseURL: 'https://api.cloudflare.com/client/v4',\n docsURL: 'https://developers.cloudflare.com/api/',\n },\n\n // ============ Storage ============\n {\n id: 'dropbox',\n name: 'Dropbox',\n category: 'storage',\n urlPattern: /api\\.dropboxapi\\.com|dropbox\\.com/i,\n baseURL: 'https://api.dropboxapi.com/2',\n docsURL: 'https://www.dropbox.com/developers/documentation',\n commonScopes: ['files.content.read', 'files.content.write'],\n },\n {\n id: 'box',\n name: 'Box',\n category: 'storage',\n urlPattern: /api\\.box\\.com/i,\n baseURL: 'https://api.box.com/2.0',\n docsURL: 'https://developer.box.com/reference/',\n },\n\n // ============ Email ============\n {\n id: 'sendgrid',\n name: 'SendGrid',\n category: 'email',\n urlPattern: /api\\.sendgrid\\.com/i,\n baseURL: 'https://api.sendgrid.com/v3',\n docsURL: 'https://docs.sendgrid.com/api-reference',\n },\n {\n id: 'mailchimp',\n name: 'Mailchimp',\n category: 'email',\n urlPattern: /api\\.mailchimp\\.com|mandrillapp\\.com/i,\n baseURL: 'https://server.api.mailchimp.com/3.0',\n docsURL: 'https://mailchimp.com/developer/marketing/api/',\n },\n {\n id: 'postmark',\n name: 'Postmark',\n category: 'email',\n urlPattern: /api\\.postmarkapp\\.com/i,\n baseURL: 'https://api.postmarkapp.com',\n docsURL: 'https://postmarkapp.com/developer',\n },\n {\n id: 'mailgun',\n name: 'Mailgun',\n category: 'email',\n urlPattern: /api\\.mailgun\\.net|api\\.eu\\.mailgun\\.net/i,\n baseURL: 'https://api.mailgun.net/v3',\n docsURL: 'https://documentation.mailgun.com/docs/mailgun/api-reference/',\n },\n\n // ============ Monitoring & Observability ============\n {\n id: 'datadog',\n name: 'Datadog',\n category: 'monitoring',\n urlPattern: /api\\.datadoghq\\.com/i,\n baseURL: 'https://api.datadoghq.com/api/v2',\n docsURL: 'https://docs.datadoghq.com/api/',\n },\n {\n id: 'pagerduty',\n name: 'PagerDuty',\n category: 'monitoring',\n urlPattern: /api\\.pagerduty\\.com/i,\n baseURL: 'https://api.pagerduty.com',\n docsURL: 'https://developer.pagerduty.com/api-reference/',\n },\n {\n id: 'sentry',\n name: 'Sentry',\n category: 'monitoring',\n urlPattern: /sentry\\.io/i,\n baseURL: 'https://sentry.io/api/0',\n docsURL: 'https://docs.sentry.io/api/',\n },\n\n // ============ Search ============\n {\n id: 'serper',\n name: 'Serper',\n category: 'search',\n urlPattern: /serper\\.dev/i,\n baseURL: 'https://google.serper.dev',\n docsURL: 'https://serper.dev/docs',\n },\n {\n id: 'brave-search',\n name: 'Brave Search',\n category: 'search',\n urlPattern: /api\\.search\\.brave\\.com/i,\n baseURL: 'https://api.search.brave.com/res/v1',\n docsURL: 'https://brave.com/search/api/',\n },\n {\n id: 'tavily',\n name: 'Tavily',\n category: 'search',\n urlPattern: /api\\.tavily\\.com/i,\n baseURL: 'https://api.tavily.com',\n docsURL: 'https://tavily.com/docs',\n },\n {\n id: 'rapidapi-search',\n name: 'RapidAPI Search',\n category: 'search',\n urlPattern: /real-time-web-search\\.p\\.rapidapi\\.com/i,\n baseURL: 'https://real-time-web-search.p.rapidapi.com',\n docsURL: 'https://rapidapi.com/letscrape-6bRBa3QguO5/api/real-time-web-search',\n },\n\n // ============ Scraping ============\n {\n id: 'zenrows',\n name: 'ZenRows',\n category: 'scrape',\n urlPattern: /api\\.zenrows\\.com/i,\n baseURL: 'https://api.zenrows.com/v1',\n docsURL: 'https://docs.zenrows.com/universal-scraper-api/api-reference',\n },\n\n // ============ Other ============\n {\n id: 'twilio',\n name: 'Twilio',\n category: 'other',\n urlPattern: /api\\.twilio\\.com/i,\n baseURL: 'https://api.twilio.com/2010-04-01',\n docsURL: 'https://www.twilio.com/docs/usage/api',\n },\n {\n id: 'zendesk',\n name: 'Zendesk',\n category: 'other',\n urlPattern: /zendesk\\.com/i,\n baseURL: 'https://your-subdomain.zendesk.com/api/v2',\n docsURL: 'https://developer.zendesk.com/api-reference/',\n commonScopes: ['read', 'write'],\n },\n {\n id: 'intercom',\n name: 'Intercom',\n category: 'other',\n urlPattern: /api\\.intercom\\.io/i,\n baseURL: 'https://api.intercom.io',\n docsURL: 'https://developers.intercom.com/docs/',\n },\n {\n id: 'shopify',\n name: 'Shopify',\n category: 'other',\n urlPattern: /shopify\\.com.*admin/i,\n baseURL: 'https://your-store.myshopify.com/admin/api/2024-01',\n docsURL: 'https://shopify.dev/docs/api',\n commonScopes: ['read_products', 'write_products', 'read_orders'],\n },\n] as const;\n\n// ============ Derived Exports (all from SERVICE_DEFINITIONS) ============\n\n/**\n * Service type - union of all service IDs\n */\nexport type ServiceType = (typeof SERVICE_DEFINITIONS)[number]['id'];\n\n/**\n * Services constant object for easy access\n * Usage: Services.Slack, Services.GitHub, etc.\n */\nexport const Services = Object.fromEntries(\n SERVICE_DEFINITIONS.map((def) => [\n // Convert kebab-case to PascalCase for object key\n def.id\n .split('-')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(''),\n def.id,\n ])\n) as { [K in string]: ServiceType };\n\n/**\n * URL patterns for auto-detection (derived from SERVICE_DEFINITIONS)\n */\nexport const SERVICE_URL_PATTERNS: ReadonlyArray<{ service: string; pattern: RegExp }> =\n SERVICE_DEFINITIONS.map((def) => ({\n service: def.id,\n pattern: def.urlPattern,\n }));\n\n/**\n * Service info lookup (derived from SERVICE_DEFINITIONS)\n */\nexport interface ServiceInfo {\n id: string;\n name: string;\n category: ServiceCategory;\n baseURL: string;\n docsURL?: string;\n commonScopes?: string[];\n}\n\n/**\n * Service info map (derived from SERVICE_DEFINITIONS)\n */\nexport const SERVICE_INFO: Record<string, ServiceInfo> = Object.fromEntries(\n SERVICE_DEFINITIONS.map((def) => [\n def.id,\n {\n id: def.id,\n name: def.name,\n category: def.category,\n baseURL: def.baseURL,\n docsURL: def.docsURL,\n commonScopes: def.commonScopes,\n },\n ])\n);\n\n// ============ Utility Functions ============\n\n// Pre-compiled pattern cache for faster detection\nlet compiledPatterns: Array<{ service: string; pattern: RegExp }> | null = null;\n\n/**\n * Get compiled patterns (lazy initialization)\n */\nfunction getCompiledPatterns(): Array<{ service: string; pattern: RegExp }> {\n if (!compiledPatterns) {\n compiledPatterns = SERVICE_DEFINITIONS.map((def) => ({\n service: def.id,\n pattern: def.urlPattern,\n }));\n }\n return compiledPatterns;\n}\n\n/**\n * Detect service type from a URL\n * @param url - Base URL or full URL to check\n * @returns Service type string or undefined if not recognized\n */\nexport function detectServiceFromURL(url: string): string | undefined {\n const patterns = getCompiledPatterns();\n\n for (const { service, pattern } of patterns) {\n if (pattern.test(url)) {\n return service;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get service info by service type\n */\nexport function getServiceInfo(serviceType: string): ServiceInfo | undefined {\n return SERVICE_INFO[serviceType];\n}\n\n/**\n * Get service definition by service type\n */\nexport function getServiceDefinition(serviceType: string): ServiceDefinition | undefined {\n return SERVICE_DEFINITIONS.find((def) => def.id === serviceType);\n}\n\n/**\n * Get all services in a category\n */\nexport function getServicesByCategory(category: ServiceCategory): ServiceDefinition[] {\n return SERVICE_DEFINITIONS.filter((def) => def.category === category);\n}\n\n/**\n * Get all service IDs\n */\nexport function getAllServiceIds(): string[] {\n return SERVICE_DEFINITIONS.map((def) => def.id);\n}\n\n/**\n * Check if a service ID is known\n */\nexport function isKnownService(serviceId: string): boolean {\n return SERVICE_DEFINITIONS.some((def) => def.id === serviceId);\n}\n"]}