diff --git a/packages/browseros-agent/.gitignore b/packages/browseros-agent/.gitignore index 67cacb882..e56958983 100644 --- a/packages/browseros-agent/.gitignore +++ b/packages/browseros-agent/.gitignore @@ -195,3 +195,4 @@ test-results/ .agent/ .llm/ .grove/ +docs/plans/2026-03-24-models-dev-integration.md diff --git a/packages/browseros-agent/CLAUDE.md b/packages/browseros-agent/CLAUDE.md index ee0339d59..039e4a4c2 100644 --- a/packages/browseros-agent/CLAUDE.md +++ b/packages/browseros-agent/CLAUDE.md @@ -81,6 +81,9 @@ bun run dev:server # Build server for development bun run dev:ext # Build extension for development bun run dist:server # Build server for production (all targets) bun run dist:ext # Build extension for production + +# Refresh models.dev data +bun run generate:models # Fetches latest from models.dev/api.json ``` ## Architecture diff --git a/packages/browseros-agent/apps/agent/entrypoints/app/ai-settings/NewProviderDialog.tsx b/packages/browseros-agent/apps/agent/entrypoints/app/ai-settings/NewProviderDialog.tsx index 2e67185d6..5069ddcfc 100644 --- a/packages/browseros-agent/apps/agent/entrypoints/app/ai-settings/NewProviderDialog.tsx +++ b/packages/browseros-agent/apps/agent/entrypoints/app/ai-settings/NewProviderDialog.tsx @@ -1,6 +1,13 @@ import { zodResolver } from '@hookform/resolvers/zod' -import { CheckCircle2, ExternalLink, Loader2, XCircle } from 'lucide-react' -import { type FC, useEffect, useState } from 'react' +import { + CheckCircle2, + ChevronDown, + ExternalLink, + Loader2, + SearchIcon, + XCircle, +} from 'lucide-react' +import { type FC, useEffect, useRef, useState } from 'react' import { useForm } from 'react-hook-form' import { z } from 'zod/v3' import { Button } from '@/components/ui/button' @@ -47,7 +54,12 @@ import { import { type TestResult, testProvider } from '@/lib/llm-providers/testProvider' import type { LlmProviderConfig, ProviderType } from '@/lib/llm-providers/types' import { track } from '@/lib/metrics/track' -import { getModelContextLength, getModelOptions } from './models' +import { cn } from '@/lib/utils' +import { + getModelContextLength, + getModelsForProvider, + type ModelInfo, +} from './models' const providerTypeEnum = z.enum([ 'moonshot', @@ -163,6 +175,107 @@ export const providerFormSchema = z */ export type ProviderFormValues = z.infer +function formatContextWindow(tokens: number): string { + if (tokens >= 1000000) + return `${(tokens / 1000000).toFixed(tokens % 1000000 === 0 ? 0 : 1)}M` + if (tokens >= 1000) return `${Math.round(tokens / 1000)}K` + return `${tokens}` +} + +function ModelPickerList({ + models, + selectedModelId, + onSelect, + onCustomSubmit, + onClose, +}: { + models: ModelInfo[] + selectedModelId: string + onSelect: (modelId: string) => void + onCustomSubmit: (modelId: string) => void + onClose: () => void +}) { + const [search, setSearch] = useState('') + const inputRef = useRef(null) + const containerRef = useRef(null) + + useEffect(() => { + inputRef.current?.focus() + }, []) + + useEffect(() => { + const handleClickOutside = (e: MouseEvent) => { + if ( + containerRef.current && + !containerRef.current.contains(e.target as Node) + ) { + onClose() + } + } + document.addEventListener('mousedown', handleClickOutside) + return () => document.removeEventListener('mousedown', handleClickOutside) + }, [onClose]) + + const query = search.toLowerCase() + const filtered = query + ? models.filter((m) => m.modelId.toLowerCase().includes(query)) + : models + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === 'Enter' && search) { + e.preventDefault() + onCustomSubmit(search) + } + if (e.key === 'Escape') { + onClose() + } + } + + return ( +
+
+ + setSearch(e.target.value)} + onKeyDown={handleKeyDown} + placeholder="Search or type a custom model ID..." + className="flex h-9 w-full bg-transparent py-2 text-sm outline-none placeholder:text-muted-foreground" + /> +
+
+ {filtered.length > 0 ? ( + filtered.map((model) => { + const isSelected = selectedModelId === model.modelId + return ( + + ) + }) + ) : ( +
+ No models match. Press Enter to use "{search}" +
+ )} +
+
+ ) +} + /** * Props for NewProviderDialog * @public @@ -188,9 +301,9 @@ export const NewProviderDialog: FC = ({ initialValues, onSave, }) => { - const [isCustomModel, setIsCustomModel] = useState(false) const [isTesting, setIsTesting] = useState(false) const [testResult, setTestResult] = useState(null) + const [modelListOpen, setModelListOpen] = useState(false) const { supports } = useCapabilities() const { baseUrl: agentServerUrl } = useAgentServerUrl() const kimiLaunch = useKimiLaunch() @@ -261,8 +374,7 @@ export const NewProviderDialog: FC = ({ watchedSessionToken, ]) - // Get model options for current provider type - const modelOptions = getModelOptions(watchedType as ProviderType) + const modelInfoList = getModelsForProvider(watchedType as ProviderType) // Handle provider type change (user-initiated via Select) const handleTypeChange = (newType: ProviderType) => { @@ -272,14 +384,13 @@ export const NewProviderDialog: FC = ({ form.setValue('baseUrl', defaultUrl) } form.setValue('modelId', '') - setIsCustomModel(false) } // Auto-fill context window when model changes (only for new providers) useEffect(() => { if (initialValues?.id) return - if (watchedModelId && watchedModelId !== 'custom') { + if (watchedModelId) { const contextLength = getModelContextLength( watchedType as ProviderType, watchedModelId, @@ -290,17 +401,6 @@ export const NewProviderDialog: FC = ({ } }, [watchedModelId, watchedType, form, initialValues?.id]) - // Handle model selection (including custom option) - const handleModelChange = (value: string) => { - if (value === 'custom') { - setIsCustomModel(true) - form.setValue('modelId', '') - } else { - setIsCustomModel(false) - form.setValue('modelId', value) - } - } - // Reset form when initialValues change useEffect(() => { if (initialValues) { @@ -325,7 +425,6 @@ export const NewProviderDialog: FC = ({ reasoningEffort: initialValues.reasoningEffort || 'high', reasoningSummary: initialValues.reasoningSummary || 'auto', }) - setIsCustomModel(false) } }, [initialValues, form]) @@ -352,7 +451,6 @@ export const NewProviderDialog: FC = ({ reasoningEffort: 'high', reasoningSummary: 'auto', }) - setIsCustomModel(false) } // Clear test result when dialog opens/closes setTestResult(null) @@ -811,52 +909,51 @@ export const NewProviderDialog: FC = ({ control={form.control} name="modelId" render={({ field }) => ( - + Model * - {isCustomModel || modelOptions.length === 1 ? ( - <> - - - - {modelOptions.length > 1 && ( - - )} - + {modelInfoList.length === 0 ? ( + + + + ) : modelListOpen ? ( + { + form.setValue('modelId', modelId) + setModelListOpen(false) + }} + onCustomSubmit={(modelId) => { + form.setValue('modelId', modelId) + setModelListOpen(false) + }} + onClose={() => setModelListOpen(false)} + /> ) : ( - + + {field.value || 'Select a model...'} + + + )} diff --git a/packages/browseros-agent/apps/agent/entrypoints/app/ai-settings/models.ts b/packages/browseros-agent/apps/agent/entrypoints/app/ai-settings/models.ts index 7b86aae68..12024563c 100644 --- a/packages/browseros-agent/apps/agent/entrypoints/app/ai-settings/models.ts +++ b/packages/browseros-agent/apps/agent/entrypoints/app/ai-settings/models.ts @@ -1,98 +1,21 @@ +import { + getModelsDevModels, + type ModelsDevModel, +} from '@/lib/llm-providers/models-dev' import type { ProviderType } from '@/lib/llm-providers/types' -/** - * Model information with context length - */ export interface ModelInfo { modelId: string contextLength: number + supportsImages?: boolean + supportsReasoning?: boolean + supportsToolCall?: boolean } -/** - * Models data organized by provider type (matches backend AIProvider enum) - */ -export interface ModelsData { - anthropic: ModelInfo[] - openai: ModelInfo[] - 'openai-compatible': ModelInfo[] - google: ModelInfo[] - openrouter: ModelInfo[] - azure: ModelInfo[] - ollama: ModelInfo[] - lmstudio: ModelInfo[] - bedrock: ModelInfo[] - browseros: ModelInfo[] - moonshot: ModelInfo[] - 'chatgpt-pro': ModelInfo[] - 'github-copilot': ModelInfo[] - 'qwen-code': ModelInfo[] -} - -/** - * Available models per provider with context lengths - * Based on: https://github.com/browseros-ai/BrowserOS-agent/blob/main/src/options/data/models.ts - */ -export const MODELS_DATA: ModelsData = { - moonshot: [{ modelId: 'kimi-k2.5', contextLength: 200000 }], - anthropic: [ - { modelId: 'claude-opus-4-5-20251101', contextLength: 200000 }, - { modelId: 'claude-haiku-4-5-20251001', contextLength: 200000 }, - { modelId: 'claude-sonnet-4-5-20250929', contextLength: 200000 }, - { modelId: 'claude-sonnet-4-20250514', contextLength: 200000 }, - { modelId: 'claude-opus-4-20250514', contextLength: 200000 }, - { modelId: 'claude-3-7-sonnet-20250219', contextLength: 200000 }, - { modelId: 'claude-3-5-haiku-20241022', contextLength: 200000 }, - ], - openai: [ - { modelId: 'gpt-5.2', contextLength: 200000 }, - { modelId: 'gpt-5.2-pro', contextLength: 200000 }, - { modelId: 'gpt-5', contextLength: 200000 }, - { modelId: 'gpt-5-mini', contextLength: 200000 }, - { modelId: 'gpt-5-nano', contextLength: 200000 }, - { modelId: 'gpt-4.1', contextLength: 200000 }, - { modelId: 'gpt-4.1-mini', contextLength: 200000 }, - { modelId: 'o4-mini', contextLength: 200000 }, - { modelId: 'o3-mini', contextLength: 200000 }, - { modelId: 'gpt-4o', contextLength: 128000 }, - { modelId: 'gpt-4o-mini', contextLength: 128000 }, - ], - 'openai-compatible': [], - google: [ - { modelId: 'gemini-3-pro-preview', contextLength: 1048576 }, - { modelId: 'gemini-3-flash-preview', contextLength: 1048576 }, - { modelId: 'gemini-2.5-flash', contextLength: 1048576 }, - { modelId: 'gemini-2.5-pro', contextLength: 1048576 }, - ], - openrouter: [ - { modelId: 'google/gemini-3-pro-preview', contextLength: 1048576 }, - { modelId: 'google/gemini-3-flash-preview', contextLength: 1048576 }, - { modelId: 'google/gemini-2.5-flash', contextLength: 1048576 }, - { modelId: 'anthropic/claude-opus-4.5', contextLength: 200000 }, - { modelId: 'anthropic/claude-haiku-4.5', contextLength: 200000 }, - { modelId: 'anthropic/claude-sonnet-4.5', contextLength: 200000 }, - { modelId: 'anthropic/claude-sonnet-4', contextLength: 200000 }, - { modelId: 'anthropic/claude-3.7-sonnet', contextLength: 200000 }, - { modelId: 'openai/gpt-4o', contextLength: 128000 }, - { modelId: 'openai/gpt-oss-120b', contextLength: 128000 }, - { modelId: 'openai/gpt-oss-20b', contextLength: 128000 }, - { modelId: 'qwen/qwen3-14b', contextLength: 131072 }, - { modelId: 'qwen/qwen3-8b', contextLength: 131072 }, - ], - azure: [], - ollama: [ - { modelId: 'qwen3:4b', contextLength: 262144 }, - { modelId: 'qwen3:8b', contextLength: 40960 }, - { modelId: 'qwen3:14b', contextLength: 40960 }, - { modelId: 'gpt-oss:20b', contextLength: 128000 }, - { modelId: 'gpt-oss:120b', contextLength: 128000 }, - ], - lmstudio: [ - { modelId: 'openai/gpt-oss-20b', contextLength: 128000 }, - { modelId: 'openai/gpt-oss-120b', contextLength: 128000 }, - { modelId: 'qwen/qwen3-vl-8b', contextLength: 131072 }, - ], - bedrock: [], +const CUSTOM_PROVIDER_MODELS: Partial> = { browseros: [{ modelId: 'browseros-auto', contextLength: 200000 }], + 'openai-compatible': [], + ollama: [], 'chatgpt-pro': [ { modelId: 'gpt-5.4', contextLength: 400000 }, { modelId: 'gpt-5.3-codex', contextLength: 400000 }, @@ -103,32 +26,6 @@ export const MODELS_DATA: ModelsData = { { modelId: 'gpt-5.1-codex-mini', contextLength: 400000 }, { modelId: 'gpt-5.1', contextLength: 200000 }, ], - 'github-copilot': [ - // Free tier (unlimited with Pro) - { modelId: 'gpt-5-mini', contextLength: 128000 }, - { modelId: 'claude-haiku-4.5', contextLength: 128000 }, - { modelId: 'gpt-4o', contextLength: 64000 }, - { modelId: 'gpt-4.1', contextLength: 64000 }, - // Premium models (Pro: 300/mo, Pro+: 1500/mo) - { modelId: 'claude-sonnet-4.6', contextLength: 128000 }, - { modelId: 'claude-sonnet-4.5', contextLength: 128000 }, - { modelId: 'claude-sonnet-4', contextLength: 128000 }, - { modelId: 'claude-opus-4.6', contextLength: 128000 }, - { modelId: 'claude-opus-4.5', contextLength: 128000 }, - { modelId: 'gemini-2.5-pro', contextLength: 128000 }, - { modelId: 'gemini-3-pro-preview', contextLength: 128000 }, - { modelId: 'gemini-3-flash-preview', contextLength: 128000 }, - { modelId: 'gemini-3.1-pro-preview', contextLength: 128000 }, - { modelId: 'gpt-5.4', contextLength: 272000 }, - { modelId: 'gpt-5.4-mini', contextLength: 128000 }, - { modelId: 'gpt-5.3-codex', contextLength: 272000 }, - { modelId: 'gpt-5.2-codex', contextLength: 272000 }, - { modelId: 'gpt-5.2', contextLength: 128000 }, - { modelId: 'gpt-5.1-codex', contextLength: 128000 }, - { modelId: 'gpt-5.1-codex-max', contextLength: 128000 }, - { modelId: 'gpt-5.1', contextLength: 128000 }, - { modelId: 'grok-code-fast-1', contextLength: 128000 }, - ], 'qwen-code': [ { modelId: 'coder-model', contextLength: 1000000 }, { modelId: 'qwen3-coder-plus', contextLength: 1000000 }, @@ -137,25 +34,23 @@ export const MODELS_DATA: ModelsData = { ], } -/** - * Get models for a specific provider type - */ +function fromModelsDevModel(m: ModelsDevModel): ModelInfo { + return { + modelId: m.id, + contextLength: m.contextWindow, + supportsImages: m.supportsImages, + supportsReasoning: m.supportsReasoning, + supportsToolCall: m.supportsToolCall, + } +} + export function getModelsForProvider(providerType: ProviderType): ModelInfo[] { - return MODELS_DATA[providerType] || [] + const custom = CUSTOM_PROVIDER_MODELS[providerType] + if (custom !== undefined) return custom + + return getModelsDevModels(providerType).map(fromModelsDevModel) } -/** - * Get model options for select dropdown (model IDs + custom option) - */ -export function getModelOptions(providerType: ProviderType): string[] { - const models = getModelsForProvider(providerType) - const modelIds = models.map((m) => m.modelId) - return modelIds.length > 0 ? [...modelIds, 'custom'] : ['custom'] -} - -/** - * Get context length for a specific model - */ export function getModelContextLength( providerType: ProviderType, modelId: string, @@ -164,14 +59,3 @@ export function getModelContextLength( const model = models.find((m) => m.modelId === modelId) return model?.contextLength } - -/** - * Check if model ID is a custom (user-entered) value - */ -export function isCustomModel( - providerType: ProviderType, - modelId: string, -): boolean { - const models = getModelsForProvider(providerType) - return !models.some((m) => m.modelId === modelId) -} diff --git a/packages/browseros-agent/apps/agent/lib/llm-providers/models-dev-data.json b/packages/browseros-agent/apps/agent/lib/llm-providers/models-dev-data.json new file mode 100644 index 000000000..df8a5083a --- /dev/null +++ b/packages/browseros-agent/apps/agent/lib/llm-providers/models-dev-data.json @@ -0,0 +1,5406 @@ +{ + "anthropic": { + "name": "Anthropic", + "doc": "https://docs.anthropic.com/en/docs/about-claude/models", + "models": [ + { + "id": "claude-opus-4-6", + "name": "Claude Opus 4.6", + "contextWindow": 1000000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 5, + "outputCost": 25 + }, + { + "id": "claude-sonnet-4-6", + "name": "Claude Sonnet 4.6", + "contextWindow": 1000000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "claude-opus-4-5", + "name": "Claude Opus 4.5 (latest)", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 5, + "outputCost": 25 + }, + { + "id": "claude-opus-4-5-20251101", + "name": "Claude Opus 4.5", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 5, + "outputCost": 25 + }, + { + "id": "claude-haiku-4-5-20251001", + "name": "Claude Haiku 4.5", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1, + "outputCost": 5 + }, + { + "id": "claude-haiku-4-5", + "name": "Claude Haiku 4.5 (latest)", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1, + "outputCost": 5 + }, + { + "id": "claude-sonnet-4-5-20250929", + "name": "Claude Sonnet 4.5", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "claude-sonnet-4-5", + "name": "Claude Sonnet 4.5 (latest)", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "claude-opus-4-1", + "name": "Claude Opus 4.1 (latest)", + "contextWindow": 200000, + "maxOutput": 32000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 15, + "outputCost": 75 + }, + { + "id": "claude-opus-4-1-20250805", + "name": "Claude Opus 4.1", + "contextWindow": 200000, + "maxOutput": 32000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 15, + "outputCost": 75 + }, + { + "id": "claude-sonnet-4-0", + "name": "Claude Sonnet 4 (latest)", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "claude-opus-4-20250514", + "name": "Claude Opus 4", + "contextWindow": 200000, + "maxOutput": 32000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 15, + "outputCost": 75 + }, + { + "id": "claude-opus-4-0", + "name": "Claude Opus 4 (latest)", + "contextWindow": 200000, + "maxOutput": 32000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 15, + "outputCost": 75 + }, + { + "id": "claude-sonnet-4-20250514", + "name": "Claude Sonnet 4", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "claude-3-7-sonnet-latest", + "name": "Claude Sonnet 3.7 (latest)", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "claude-3-7-sonnet-20250219", + "name": "Claude Sonnet 3.7", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "claude-3-5-haiku-latest", + "name": "Claude Haiku 3.5 (latest)", + "contextWindow": 200000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.8, + "outputCost": 4 + }, + { + "id": "claude-3-5-sonnet-20241022", + "name": "Claude Sonnet 3.5 v2", + "contextWindow": 200000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "claude-3-5-haiku-20241022", + "name": "Claude Haiku 3.5", + "contextWindow": 200000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.8, + "outputCost": 4 + }, + { + "id": "claude-3-5-sonnet-20240620", + "name": "Claude Sonnet 3.5", + "contextWindow": 200000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "claude-3-haiku-20240307", + "name": "Claude Haiku 3", + "contextWindow": 200000, + "maxOutput": 4096, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.25, + "outputCost": 1.25 + }, + { + "id": "claude-3-sonnet-20240229", + "name": "Claude Sonnet 3", + "contextWindow": 200000, + "maxOutput": 4096, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "claude-3-opus-20240229", + "name": "Claude Opus 3", + "contextWindow": 200000, + "maxOutput": 4096, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 15, + "outputCost": 75 + } + ] + }, + "openai": { + "name": "OpenAI", + "doc": "https://platform.openai.com/docs/models", + "models": [ + { + "id": "gpt-5.4-nano", + "name": "GPT-5.4 nano", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.2, + "outputCost": 1.25 + }, + { + "id": "gpt-5.4-mini", + "name": "GPT-5.4 mini", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.75, + "outputCost": 4.5 + }, + { + "id": "gpt-5.4", + "name": "GPT-5.4", + "contextWindow": 1050000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 2.5, + "outputCost": 15 + }, + { + "id": "gpt-5.4-pro", + "name": "GPT-5.4 Pro", + "contextWindow": 1050000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 30, + "outputCost": 180 + }, + { + "id": "gpt-5.3-codex", + "name": "GPT-5.3 Codex", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.75, + "outputCost": 14 + }, + { + "id": "gpt-5.3-codex-spark", + "name": "GPT-5.3 Codex Spark", + "contextWindow": 128000, + "maxOutput": 32000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.75, + "outputCost": 14 + }, + { + "id": "gpt-5.2-chat-latest", + "name": "GPT-5.2 Chat", + "contextWindow": 128000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.75, + "outputCost": 14 + }, + { + "id": "gpt-5.2-codex", + "name": "GPT-5.2 Codex", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.75, + "outputCost": 14 + }, + { + "id": "gpt-5.2", + "name": "GPT-5.2", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.75, + "outputCost": 14 + }, + { + "id": "gpt-5.2-pro", + "name": "GPT-5.2 Pro", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 21, + "outputCost": 168 + }, + { + "id": "gpt-5.1-codex-max", + "name": "GPT-5.1 Codex Max", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "gpt-5.1", + "name": "GPT-5.1", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "gpt-5.1-codex-mini", + "name": "GPT-5.1 Codex mini", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.25, + "outputCost": 2 + }, + { + "id": "gpt-5.1-codex", + "name": "GPT-5.1 Codex", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "gpt-5.1-chat-latest", + "name": "GPT-5.1 Chat", + "contextWindow": 128000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "gpt-5-pro", + "name": "GPT-5 Pro", + "contextWindow": 400000, + "maxOutput": 272000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 15, + "outputCost": 120 + }, + { + "id": "gpt-5-codex", + "name": "GPT-5-Codex", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "gpt-5-chat-latest", + "name": "GPT-5 Chat (latest)", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": false, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "gpt-5", + "name": "GPT-5", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "gpt-5-mini", + "name": "GPT-5 Mini", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.25, + "outputCost": 2 + }, + { + "id": "gpt-5-nano", + "name": "GPT-5 Nano", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.05, + "outputCost": 0.4 + }, + { + "id": "o3-pro", + "name": "o3-pro", + "contextWindow": 200000, + "maxOutput": 100000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 20, + "outputCost": 80 + }, + { + "id": "codex-mini-latest", + "name": "Codex Mini", + "contextWindow": 200000, + "maxOutput": 100000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.5, + "outputCost": 6 + }, + { + "id": "o3", + "name": "o3", + "contextWindow": 200000, + "maxOutput": 100000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 2, + "outputCost": 8 + }, + { + "id": "o4-mini", + "name": "o4-mini", + "contextWindow": 200000, + "maxOutput": 100000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.1, + "outputCost": 4.4 + }, + { + "id": "gpt-4.1-nano", + "name": "GPT-4.1 nano", + "contextWindow": 1047576, + "maxOutput": 32768, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.1, + "outputCost": 0.4 + }, + { + "id": "gpt-4.1", + "name": "GPT-4.1", + "contextWindow": 1047576, + "maxOutput": 32768, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 2, + "outputCost": 8 + }, + { + "id": "gpt-4.1-mini", + "name": "GPT-4.1 mini", + "contextWindow": 1047576, + "maxOutput": 32768, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.4, + "outputCost": 1.6 + }, + { + "id": "o1-pro", + "name": "o1-pro", + "contextWindow": 200000, + "maxOutput": 100000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 150, + "outputCost": 600 + }, + { + "id": "o3-mini", + "name": "o3-mini", + "contextWindow": 200000, + "maxOutput": 100000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.1, + "outputCost": 4.4 + }, + { + "id": "o1", + "name": "o1", + "contextWindow": 200000, + "maxOutput": 100000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 15, + "outputCost": 60 + }, + { + "id": "gpt-4o-2024-11-20", + "name": "GPT-4o (2024-11-20)", + "contextWindow": 128000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 2.5, + "outputCost": 10 + }, + { + "id": "o1-preview", + "name": "o1-preview", + "contextWindow": 128000, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": false, + "inputCost": 15, + "outputCost": 60 + }, + { + "id": "o1-mini", + "name": "o1-mini", + "contextWindow": 128000, + "maxOutput": 65536, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": false, + "inputCost": 1.1, + "outputCost": 4.4 + }, + { + "id": "gpt-4o-2024-08-06", + "name": "GPT-4o (2024-08-06)", + "contextWindow": 128000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 2.5, + "outputCost": 10 + }, + { + "id": "gpt-4o", + "name": "GPT-4o", + "contextWindow": 128000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 2.5, + "outputCost": 10 + }, + { + "id": "gpt-4o-mini", + "name": "GPT-4o mini", + "contextWindow": 128000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.15, + "outputCost": 0.6 + }, + { + "id": "o3-deep-research", + "name": "o3-deep-research", + "contextWindow": 200000, + "maxOutput": 100000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 10, + "outputCost": 40 + }, + { + "id": "o4-mini-deep-research", + "name": "o4-mini-deep-research", + "contextWindow": 200000, + "maxOutput": 100000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 2, + "outputCost": 8 + }, + { + "id": "gpt-4o-2024-05-13", + "name": "GPT-4o (2024-05-13)", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 5, + "outputCost": 15 + }, + { + "id": "gpt-4-turbo", + "name": "GPT-4 Turbo", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 10, + "outputCost": 30 + }, + { + "id": "gpt-4", + "name": "GPT-4", + "contextWindow": 8192, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 30, + "outputCost": 60 + }, + { + "id": "text-embedding-3-small", + "name": "text-embedding-3-small", + "contextWindow": 8191, + "maxOutput": 1536, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.02, + "outputCost": 0 + }, + { + "id": "text-embedding-3-large", + "name": "text-embedding-3-large", + "contextWindow": 8191, + "maxOutput": 3072, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.13, + "outputCost": 0 + }, + { + "id": "gpt-3.5-turbo", + "name": "GPT-3.5-turbo", + "contextWindow": 16385, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.5, + "outputCost": 1.5 + }, + { + "id": "text-embedding-ada-002", + "name": "text-embedding-ada-002", + "contextWindow": 8192, + "maxOutput": 1536, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.1, + "outputCost": 0 + } + ] + }, + "google": { + "name": "Google", + "doc": "https://ai.google.dev/gemini-api/docs/pricing", + "models": [ + { + "id": "gemini-3.1-flash-lite-preview", + "name": "Gemini 3.1 Flash Lite Preview", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.25, + "outputCost": 1.5 + }, + { + "id": "gemini-3.1-flash-image-preview", + "name": "Gemini 3.1 Flash Image (Preview)", + "contextWindow": 131072, + "maxOutput": 32768, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": false, + "inputCost": 0.25, + "outputCost": 60 + }, + { + "id": "gemini-3.1-pro-preview-customtools", + "name": "Gemini 3.1 Pro Preview Custom Tools", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 2, + "outputCost": 12 + }, + { + "id": "gemini-3.1-pro-preview", + "name": "Gemini 3.1 Pro Preview", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 2, + "outputCost": 12 + }, + { + "id": "gemini-3-flash-preview", + "name": "Gemini 3 Flash Preview", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.5, + "outputCost": 3 + }, + { + "id": "gemini-3-pro-preview", + "name": "Gemini 3 Pro Preview", + "contextWindow": 1000000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 2, + "outputCost": 12 + }, + { + "id": "gemini-2.5-flash-lite-preview-09-2025", + "name": "Gemini 2.5 Flash Lite Preview 09-25", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.1, + "outputCost": 0.4 + }, + { + "id": "gemini-2.5-flash-preview-09-2025", + "name": "Gemini 2.5 Flash Preview 09-25", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 2.5 + }, + { + "id": "gemini-flash-latest", + "name": "Gemini Flash Latest", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 2.5 + }, + { + "id": "gemini-flash-lite-latest", + "name": "Gemini Flash-Lite Latest", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.1, + "outputCost": 0.4 + }, + { + "id": "gemini-live-2.5-flash-preview-native-audio", + "name": "Gemini Live 2.5 Flash Preview Native Audio", + "contextWindow": 131072, + "maxOutput": 65536, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.5, + "outputCost": 2 + }, + { + "id": "gemini-live-2.5-flash", + "name": "Gemini Live 2.5 Flash", + "contextWindow": 128000, + "maxOutput": 8000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.5, + "outputCost": 2 + }, + { + "id": "gemini-2.5-flash-image", + "name": "Gemini 2.5 Flash Image", + "contextWindow": 32768, + "maxOutput": 32768, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": false, + "inputCost": 0.3, + "outputCost": 30 + }, + { + "id": "gemini-2.5-flash-image-preview", + "name": "Gemini 2.5 Flash Image (Preview)", + "contextWindow": 32768, + "maxOutput": 32768, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": false, + "inputCost": 0.3, + "outputCost": 30 + }, + { + "id": "gemini-2.5-flash-lite", + "name": "Gemini 2.5 Flash Lite", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.1, + "outputCost": 0.4 + }, + { + "id": "gemini-2.5-flash-lite-preview-06-17", + "name": "Gemini 2.5 Flash Lite Preview 06-17", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.1, + "outputCost": 0.4 + }, + { + "id": "gemini-2.5-pro-preview-06-05", + "name": "Gemini 2.5 Pro Preview 06-05", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "gemini-2.5-flash", + "name": "Gemini 2.5 Flash", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 2.5 + }, + { + "id": "gemini-2.5-pro", + "name": "Gemini 2.5 Pro", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "gemini-embedding-001", + "name": "Gemini Embedding 001", + "contextWindow": 2048, + "maxOutput": 3072, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.15, + "outputCost": 0 + }, + { + "id": "gemini-2.5-flash-preview-05-20", + "name": "Gemini 2.5 Flash Preview 05-20", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.15, + "outputCost": 0.6 + }, + { + "id": "gemini-2.5-pro-preview-05-06", + "name": "Gemini 2.5 Pro Preview 05-06", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "gemini-2.5-flash-preview-tts", + "name": "Gemini 2.5 Flash Preview TTS", + "contextWindow": 8000, + "maxOutput": 16000, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.5, + "outputCost": 10 + }, + { + "id": "gemini-2.5-pro-preview-tts", + "name": "Gemini 2.5 Pro Preview TTS", + "contextWindow": 8000, + "maxOutput": 16000, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 1, + "outputCost": 20 + }, + { + "id": "gemini-2.5-flash-preview-04-17", + "name": "Gemini 2.5 Flash Preview 04-17", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.15, + "outputCost": 0.6 + }, + { + "id": "gemini-2.0-flash-lite", + "name": "Gemini 2.0 Flash Lite", + "contextWindow": 1048576, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.075, + "outputCost": 0.3 + }, + { + "id": "gemini-2.0-flash", + "name": "Gemini 2.0 Flash", + "contextWindow": 1048576, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.1, + "outputCost": 0.4 + }, + { + "id": "gemini-1.5-flash-8b", + "name": "Gemini 1.5 Flash-8B", + "contextWindow": 1000000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.0375, + "outputCost": 0.15 + }, + { + "id": "gemini-1.5-flash", + "name": "Gemini 1.5 Flash", + "contextWindow": 1000000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.075, + "outputCost": 0.3 + }, + { + "id": "gemini-1.5-pro", + "name": "Gemini 1.5 Pro", + "contextWindow": 1000000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 5 + } + ] + }, + "openrouter": { + "name": "OpenRouter", + "api": "https://openrouter.ai/api/v1", + "doc": "https://openrouter.ai/models", + "models": [ + { + "id": "xiaomi/mimo-v2-omni", + "name": "MiMo-V2-Omni", + "contextWindow": 262144, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.4, + "outputCost": 2 + }, + { + "id": "xiaomi/mimo-v2-pro", + "name": "MiMo-V2-Pro", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1, + "outputCost": 3 + }, + { + "id": "minimax/minimax-m2.7", + "name": "MiniMax M2.7", + "contextWindow": 204800, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 1.2 + }, + { + "id": "openai/gpt-5.4-nano", + "name": "GPT-5.4 Nano", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 2e-7, + "outputCost": 0.00000125 + }, + { + "id": "openai/gpt-5.4-mini", + "name": "GPT-5.4 Mini", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 7.5e-7, + "outputCost": 0.0000045 + }, + { + "id": "x-ai/grok-4.20-multi-agent-beta", + "name": "Grok 4.20 Multi - Agent Beta", + "contextWindow": 2000000, + "maxOutput": 30000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": false, + "inputCost": 2, + "outputCost": 6 + }, + { + "id": "x-ai/grok-4.20-beta", + "name": "Grok 4.20 Beta", + "contextWindow": 2000000, + "maxOutput": 30000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 2, + "outputCost": 6 + }, + { + "id": "nvidia/nemotron-3-super-120b-a12b", + "name": "Nemotron 3 Super", + "contextWindow": 262144, + "maxOutput": 262144, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.1, + "outputCost": 0.5 + }, + { + "id": "nvidia/nemotron-3-super-120b-a12b-free", + "name": "Nemotron 3 Super (free)", + "contextWindow": 262144, + "maxOutput": 262144, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "openai/gpt-5.4", + "name": "GPT-5.4", + "contextWindow": 1050000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 2.5, + "outputCost": 15 + }, + { + "id": "openai/gpt-5.4-pro", + "name": "GPT-5.4 Pro", + "contextWindow": 1050000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 30, + "outputCost": 180 + }, + { + "id": "inception/mercury-2", + "name": "Mercury 2", + "contextWindow": 128000, + "maxOutput": 50000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.25, + "outputCost": 0.75 + }, + { + "id": "google/gemini-3.1-flash-lite-preview", + "name": "Gemini 3.1 Flash Lite Preview", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.25, + "outputCost": 1.5 + }, + { + "id": "openai/gpt-5.3-codex", + "name": "GPT-5.3-Codex", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.75, + "outputCost": 14 + }, + { + "id": "google/gemini-3.1-pro-preview-customtools", + "name": "Gemini 3.1 Pro Preview Custom Tools", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 2, + "outputCost": 12 + }, + { + "id": "google/gemini-3.1-pro-preview", + "name": "Gemini 3.1 Pro Preview", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 2, + "outputCost": 12 + }, + { + "id": "anthropic/claude-sonnet-4.6", + "name": "Claude Sonnet 4.6", + "contextWindow": 1000000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "qwen/qwen3.5-397b-a17b", + "name": "Qwen3.5 397B A17B", + "contextWindow": 262144, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 3.6 + }, + { + "id": "qwen/qwen3.5-plus-02-15", + "name": "Qwen3.5 Plus 2026-02-15", + "contextWindow": 1000000, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.4, + "outputCost": 2.4 + }, + { + "id": "z-ai/glm-5", + "name": "GLM-5", + "contextWindow": 202752, + "maxOutput": 131000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1, + "outputCost": 3.2 + }, + { + "id": "minimax/minimax-m2.5", + "name": "MiniMax M2.5", + "contextWindow": 204800, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 1.2 + }, + { + "id": "anthropic/claude-opus-4.6", + "name": "Claude Opus 4.6", + "contextWindow": 1000000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 5, + "outputCost": 25 + }, + { + "id": "openrouter/free", + "name": "Free Models Router", + "contextWindow": 200000, + "maxOutput": 8000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "nvidia/nemotron-nano-12b-v2-vl:free", + "name": "Nemotron Nano 12B 2 VL (free)", + "contextWindow": 128000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "nvidia/nemotron-3-nano-30b-a3b:free", + "name": "Nemotron 3 Nano 30B A3B (free)", + "contextWindow": 256000, + "maxOutput": 256000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "cognitivecomputations/dolphin-mistral-24b-venice-edition:free", + "name": "Uncensored (free)", + "contextWindow": 32768, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "openai/gpt-oss-20b:free", + "name": "gpt-oss-20b (free)", + "contextWindow": 131072, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "bytedance-seed/seedream-4.5", + "name": "Seedream 4.5", + "contextWindow": 4096, + "maxOutput": 4096, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "black-forest-labs/flux.2-pro", + "name": "FLUX.2 Pro", + "contextWindow": 46864, + "maxOutput": 46864, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "black-forest-labs/flux.2-flex", + "name": "FLUX.2 Flex", + "contextWindow": 67344, + "maxOutput": 67344, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "black-forest-labs/flux.2-max", + "name": "FLUX.2 Max", + "contextWindow": 46864, + "maxOutput": 46864, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "black-forest-labs/flux.2-klein-4b", + "name": "FLUX.2 Klein 4B", + "contextWindow": 40960, + "maxOutput": 40960, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "stepfun/step-3.5-flash:free", + "name": "Step 3.5 Flash (free)", + "contextWindow": 256000, + "maxOutput": 256000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "stepfun/step-3.5-flash", + "name": "Step 3.5 Flash", + "contextWindow": 256000, + "maxOutput": 256000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.1, + "outputCost": 0.3 + }, + { + "id": "arcee-ai/trinity-large-preview:free", + "name": "Trinity Large Preview", + "contextWindow": 131072, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "arcee-ai/trinity-mini:free", + "name": "Trinity Mini", + "contextWindow": 131072, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "liquid/lfm-2.5-1.2b-thinking:free", + "name": "LFM2.5-1.2B-Thinking (free)", + "contextWindow": 131072, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "liquid/lfm-2.5-1.2b-instruct:free", + "name": "LFM2.5-1.2B-Instruct (free)", + "contextWindow": 131072, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "sourceful/riverflow-v2-fast-preview", + "name": "Riverflow V2 Fast Preview", + "contextWindow": 8192, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "sourceful/riverflow-v2-max-preview", + "name": "Riverflow V2 Max Preview", + "contextWindow": 8192, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "sourceful/riverflow-v2-standard-preview", + "name": "Riverflow V2 Standard Preview", + "contextWindow": 8192, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "moonshotai/kimi-k2.5", + "name": "Kimi K2.5", + "contextWindow": 262144, + "maxOutput": 262144, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 3 + }, + { + "id": "z-ai/glm-4.7-flash", + "name": "GLM-4.7-Flash", + "contextWindow": 200000, + "maxOutput": 65535, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.07, + "outputCost": 0.4 + }, + { + "id": "openai/gpt-5.2-codex", + "name": "GPT-5.2-Codex", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.75, + "outputCost": 14 + }, + { + "id": "minimax/minimax-m2.1", + "name": "MiniMax M2.1", + "contextWindow": 204800, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 1.2 + }, + { + "id": "z-ai/glm-4.7", + "name": "GLM-4.7", + "contextWindow": 204800, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 2.2 + }, + { + "id": "google/gemini-3-flash-preview", + "name": "Gemini 3 Flash Preview", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.5, + "outputCost": 3 + }, + { + "id": "xiaomi/mimo-v2-flash", + "name": "MiMo-V2-Flash", + "contextWindow": 262144, + "maxOutput": 65536, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.1, + "outputCost": 0.3 + }, + { + "id": "openai/gpt-5.2-chat", + "name": "GPT-5.2 Chat", + "contextWindow": 128000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.75, + "outputCost": 14 + }, + { + "id": "openai/gpt-5.2", + "name": "GPT-5.2", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.75, + "outputCost": 14 + }, + { + "id": "openai/gpt-5.2-pro", + "name": "GPT-5.2 Pro", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 21, + "outputCost": 168 + }, + { + "id": "deepseek/deepseek-v3.2-speciale", + "name": "DeepSeek V3.2 Speciale", + "contextWindow": 163840, + "maxOutput": 65536, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.27, + "outputCost": 0.41 + }, + { + "id": "deepseek/deepseek-v3.2", + "name": "DeepSeek V3.2", + "contextWindow": 163840, + "maxOutput": 65536, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.28, + "outputCost": 0.4 + }, + { + "id": "anthropic/claude-opus-4.5", + "name": "Claude Opus 4.5", + "contextWindow": 200000, + "maxOutput": 32000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 5, + "outputCost": 25 + }, + { + "id": "x-ai/grok-4.1-fast", + "name": "Grok 4.1 Fast", + "contextWindow": 2000000, + "maxOutput": 30000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.2, + "outputCost": 0.5 + }, + { + "id": "openai/gpt-5.1-codex-max", + "name": "GPT-5.1-Codex-Max", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.1, + "outputCost": 9 + }, + { + "id": "openai/gpt-5.1", + "name": "GPT-5.1", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "openai/gpt-5.1-chat", + "name": "GPT-5.1 Chat", + "contextWindow": 128000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "openai/gpt-5.1-codex-mini", + "name": "GPT-5.1-Codex-Mini", + "contextWindow": 400000, + "maxOutput": 100000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.25, + "outputCost": 2 + }, + { + "id": "openai/gpt-5.1-codex", + "name": "GPT-5.1-Codex", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "moonshotai/kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "contextWindow": 262144, + "maxOutput": 262144, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 2.5 + }, + { + "id": "google/gemini-3-pro-preview", + "name": "Gemini 3 Pro Preview", + "contextWindow": 1050000, + "maxOutput": 66000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 2, + "outputCost": 12 + }, + { + "id": "openai/gpt-oss-safeguard-20b", + "name": "GPT OSS Safeguard 20B", + "contextWindow": 131072, + "maxOutput": 65536, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.075, + "outputCost": 0.3 + }, + { + "id": "minimax/minimax-m2", + "name": "MiniMax M2", + "contextWindow": 196600, + "maxOutput": 118000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.28, + "outputCost": 1.15 + }, + { + "id": "anthropic/claude-haiku-4.5", + "name": "Claude Haiku 4.5", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1, + "outputCost": 5 + }, + { + "id": "openai/gpt-5-image", + "name": "GPT-5 Image", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 5, + "outputCost": 10 + }, + { + "id": "openai/gpt-5-pro", + "name": "GPT-5 Pro", + "contextWindow": 400000, + "maxOutput": 272000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 15, + "outputCost": 120 + }, + { + "id": "z-ai/glm-4.6:exacto", + "name": "GLM 4.6 (exacto)", + "contextWindow": 200000, + "maxOutput": 128000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 1.9 + }, + { + "id": "z-ai/glm-4.6", + "name": "GLM 4.6", + "contextWindow": 200000, + "maxOutput": 128000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 2.2 + }, + { + "id": "anthropic/claude-sonnet-4.5", + "name": "Claude Sonnet 4.5", + "contextWindow": 1000000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "google/gemini-2.5-flash-lite-preview-09-2025", + "name": "Gemini 2.5 Flash Lite Preview 09-25", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.1, + "outputCost": 0.4 + }, + { + "id": "google/gemini-2.5-flash-preview-09-2025", + "name": "Gemini 2.5 Flash Preview 09-25", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 2.5 + }, + { + "id": "deepseek/deepseek-v3.1-terminus:exacto", + "name": "DeepSeek V3.1 Terminus (exacto)", + "contextWindow": 131072, + "maxOutput": 65536, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.27, + "outputCost": 1 + }, + { + "id": "deepseek/deepseek-v3.1-terminus", + "name": "DeepSeek V3.1 Terminus", + "contextWindow": 131072, + "maxOutput": 65536, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.27, + "outputCost": 1 + }, + { + "id": "openai/gpt-5-codex", + "name": "GPT-5 Codex", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "mistralai/devstral-2512", + "name": "Devstral 2 2512", + "contextWindow": 262144, + "maxOutput": 262144, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.15, + "outputCost": 0.6 + }, + { + "id": "qwen/qwen3-next-80b-a3b-thinking", + "name": "Qwen3 Next 80B A3B Thinking", + "contextWindow": 262144, + "maxOutput": 262144, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.14, + "outputCost": 1.4 + }, + { + "id": "qwen/qwen3-next-80b-a3b-instruct:free", + "name": "Qwen3 Next 80B A3B Instruct (free)", + "contextWindow": 262144, + "maxOutput": 262144, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "qwen/qwen3-next-80b-a3b-instruct", + "name": "Qwen3 Next 80B A3B Instruct", + "contextWindow": 262144, + "maxOutput": 262144, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.14, + "outputCost": 1.4 + }, + { + "id": "moonshotai/kimi-k2-0905", + "name": "Kimi K2 Instruct 0905", + "contextWindow": 262144, + "maxOutput": 16384, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 2.5 + }, + { + "id": "moonshotai/kimi-k2-0905:exacto", + "name": "Kimi K2 Instruct 0905 (exacto)", + "contextWindow": 262144, + "maxOutput": 16384, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 2.5 + }, + { + "id": "qwen/qwen3-max", + "name": "Qwen3 Max", + "contextWindow": 262144, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.2, + "outputCost": 6 + }, + { + "id": "x-ai/grok-code-fast-1", + "name": "Grok Code Fast 1", + "contextWindow": 256000, + "maxOutput": 10000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.2, + "outputCost": 1.5 + }, + { + "id": "nousresearch/hermes-4-405b", + "name": "Hermes 4 405B", + "contextWindow": 131072, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1, + "outputCost": 3 + }, + { + "id": "nousresearch/hermes-4-70b", + "name": "Hermes 4 70B", + "contextWindow": 131072, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.13, + "outputCost": 0.4 + }, + { + "id": "deepseek/deepseek-chat-v3.1", + "name": "DeepSeek-V3.1", + "contextWindow": 163840, + "maxOutput": 163840, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.2, + "outputCost": 0.8 + }, + { + "id": "x-ai/grok-4-fast", + "name": "Grok 4 Fast", + "contextWindow": 2000000, + "maxOutput": 30000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.2, + "outputCost": 0.5 + }, + { + "id": "nvidia/nemotron-nano-9b-v2:free", + "name": "Nemotron Nano 9B V2 (free)", + "contextWindow": 128000, + "maxOutput": 128000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "nvidia/nemotron-nano-9b-v2", + "name": "nvidia-nemotron-nano-9b-v2", + "contextWindow": 131072, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.04, + "outputCost": 0.16 + }, + { + "id": "mistralai/mistral-medium-3.1", + "name": "Mistral Medium 3.1", + "contextWindow": 262144, + "maxOutput": 262144, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.4, + "outputCost": 2 + }, + { + "id": "z-ai/glm-4.5v", + "name": "GLM 4.5V", + "contextWindow": 64000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 1.8 + }, + { + "id": "openai/gpt-5-chat", + "name": "GPT-5 Chat (latest)", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": false, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "openai/gpt-5", + "name": "GPT-5", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "openai/gpt-5-mini", + "name": "GPT-5 Mini", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.25, + "outputCost": 2 + }, + { + "id": "openai/gpt-5-nano", + "name": "GPT-5 Nano", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.05, + "outputCost": 0.4 + }, + { + "id": "openai/gpt-oss-120b:exacto", + "name": "GPT OSS 120B (exacto)", + "contextWindow": 131072, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.05, + "outputCost": 0.24 + }, + { + "id": "openai/gpt-oss-120b", + "name": "GPT OSS 120B", + "contextWindow": 131072, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.072, + "outputCost": 0.28 + }, + { + "id": "openai/gpt-oss-20b", + "name": "GPT OSS 20B", + "contextWindow": 131072, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.05, + "outputCost": 0.2 + }, + { + "id": "openai/gpt-oss-120b:free", + "name": "gpt-oss-120b (free)", + "contextWindow": 131072, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "anthropic/claude-opus-4.1", + "name": "Claude Opus 4.1", + "contextWindow": 200000, + "maxOutput": 32000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 15, + "outputCost": 75 + }, + { + "id": "mistralai/codestral-2508", + "name": "Codestral 2508", + "contextWindow": 256000, + "maxOutput": 256000, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 0.9 + }, + { + "id": "qwen/qwen3-coder-30b-a3b-instruct", + "name": "Qwen3 Coder 30B A3B Instruct", + "contextWindow": 160000, + "maxOutput": 65536, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.07, + "outputCost": 0.27 + }, + { + "id": "qwen/qwen3-30b-a3b-instruct-2507", + "name": "Qwen3 30B A3B Instruct 2507", + "contextWindow": 262000, + "maxOutput": 262000, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.2, + "outputCost": 0.8 + }, + { + "id": "qwen/qwen3-30b-a3b-thinking-2507", + "name": "Qwen3 30B A3B Thinking 2507", + "contextWindow": 262000, + "maxOutput": 262000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.2, + "outputCost": 0.8 + }, + { + "id": "z-ai/glm-4.5-air", + "name": "GLM 4.5 Air", + "contextWindow": 128000, + "maxOutput": 96000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.2, + "outputCost": 1.1 + }, + { + "id": "z-ai/glm-4.5", + "name": "GLM 4.5", + "contextWindow": 128000, + "maxOutput": 96000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 2.2 + }, + { + "id": "z-ai/glm-4.5-air:free", + "name": "GLM 4.5 Air (free)", + "contextWindow": 128000, + "maxOutput": 96000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "qwen/qwen3-235b-a22b-thinking-2507", + "name": "Qwen3 235B A22B Thinking 2507", + "contextWindow": 262144, + "maxOutput": 81920, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.078, + "outputCost": 0.312 + }, + { + "id": "qwen/qwen3-coder:free", + "name": "Qwen3 Coder 480B A35B Instruct (free)", + "contextWindow": 262144, + "maxOutput": 66536, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "qwen/qwen3-coder-flash", + "name": "Qwen3 Coder Flash", + "contextWindow": 128000, + "maxOutput": 66536, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 1.5 + }, + { + "id": "qwen/qwen3-coder", + "name": "Qwen3 Coder", + "contextWindow": 262144, + "maxOutput": 66536, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 1.2 + }, + { + "id": "qwen/qwen3-coder:exacto", + "name": "Qwen3 Coder (exacto)", + "contextWindow": 131072, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.38, + "outputCost": 1.53 + }, + { + "id": "qwen/qwen3-4b:free", + "name": "Qwen3 4B (free)", + "contextWindow": 40960, + "maxOutput": 40960, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "qwen/qwen3-235b-a22b-07-25", + "name": "Qwen3 235B A22B Instruct 2507", + "contextWindow": 262144, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.15, + "outputCost": 0.85 + }, + { + "id": "google/gemini-2.5-flash", + "name": "Gemini 2.5 Flash", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 2.5 + }, + { + "id": "moonshotai/kimi-k2", + "name": "Kimi K2", + "contextWindow": 131072, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.55, + "outputCost": 2.2 + }, + { + "id": "moonshotai/kimi-k2:free", + "name": "Kimi K2 (free)", + "contextWindow": 32800, + "maxOutput": 32800, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "mistralai/devstral-medium-2507", + "name": "Devstral Medium", + "contextWindow": 131072, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.4, + "outputCost": 2 + }, + { + "id": "mistralai/devstral-small-2507", + "name": "Devstral Small 1.1", + "contextWindow": 131072, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.1, + "outputCost": 0.3 + }, + { + "id": "google/gemma-3n-e2b-it:free", + "name": "Gemma 3n 2B (free)", + "contextWindow": 8192, + "maxOutput": 2000, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "x-ai/grok-4", + "name": "Grok 4", + "contextWindow": 256000, + "maxOutput": 64000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "inception/mercury", + "name": "Mercury", + "contextWindow": 128000, + "maxOutput": 32000, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.25, + "outputCost": 0.75 + }, + { + "id": "mistralai/mistral-small-3.2-24b-instruct", + "name": "Mistral Small 3.2 24B Instruct", + "contextWindow": 96000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "google/gemini-2.5-flash-lite", + "name": "Gemini 2.5 Flash Lite", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.1, + "outputCost": 0.4 + }, + { + "id": "minimax/minimax-m1", + "name": "MiniMax M1", + "contextWindow": 1000000, + "maxOutput": 40000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.4, + "outputCost": 2.2 + }, + { + "id": "google/gemini-2.5-pro-preview-06-05", + "name": "Gemini 2.5 Pro Preview 06-05", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "google/gemini-2.5-pro", + "name": "Gemini 2.5 Pro", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "anthropic/claude-opus-4", + "name": "Claude Opus 4", + "contextWindow": 200000, + "maxOutput": 32000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 15, + "outputCost": 75 + }, + { + "id": "anthropic/claude-sonnet-4", + "name": "Claude Sonnet 4", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "google/gemma-3n-e4b-it:free", + "name": "Gemma 3n 4B (free)", + "contextWindow": 8192, + "maxOutput": 2000, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "google/gemma-3n-e4b-it", + "name": "Gemma 3n 4B", + "contextWindow": 32768, + "maxOutput": 32768, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.02, + "outputCost": 0.04 + }, + { + "id": "mistralai/mistral-medium-3", + "name": "Mistral Medium 3", + "contextWindow": 131072, + "maxOutput": 131072, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.4, + "outputCost": 2 + }, + { + "id": "mistralai/devstral-small-2505", + "name": "Devstral Small", + "contextWindow": 128000, + "maxOutput": 128000, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.06, + "outputCost": 0.12 + }, + { + "id": "google/gemini-2.5-pro-preview-05-06", + "name": "Gemini 2.5 Pro Preview 05-06", + "contextWindow": 1048576, + "maxOutput": 65536, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "inception/mercury-coder", + "name": "Mercury Coder", + "contextWindow": 128000, + "maxOutput": 32000, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.25, + "outputCost": 0.75 + }, + { + "id": "openai/o4-mini", + "name": "o4 Mini", + "contextWindow": 200000, + "maxOutput": 100000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.1, + "outputCost": 4.4 + }, + { + "id": "openai/gpt-4.1", + "name": "GPT-4.1", + "contextWindow": 1047576, + "maxOutput": 32768, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 2, + "outputCost": 8 + }, + { + "id": "openai/gpt-4.1-mini", + "name": "GPT-4.1 Mini", + "contextWindow": 1047576, + "maxOutput": 32768, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.4, + "outputCost": 1.6 + }, + { + "id": "deepseek/deepseek-chat-v3-0324", + "name": "DeepSeek V3 0324", + "contextWindow": 16384, + "maxOutput": 8192, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "mistralai/mistral-small-3.1-24b-instruct", + "name": "Mistral Small 3.1 24B Instruct", + "contextWindow": 128000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "google/gemma-3-12b-it:free", + "name": "Gemma 3 12B (free)", + "contextWindow": 32768, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "google/gemma-3-4b-it:free", + "name": "Gemma 3 4B (free)", + "contextWindow": 32768, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "google/gemma-3-12b-it", + "name": "Gemma 3 12B", + "contextWindow": 131072, + "maxOutput": 131072, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.03, + "outputCost": 0.1 + }, + { + "id": "google/gemma-3-4b-it", + "name": "Gemma 3 4B", + "contextWindow": 96000, + "maxOutput": 96000, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.01703, + "outputCost": 0.06815 + }, + { + "id": "google/gemma-3-27b-it", + "name": "Gemma 3 27B", + "contextWindow": 96000, + "maxOutput": 96000, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.04, + "outputCost": 0.15 + }, + { + "id": "google/gemma-3-27b-it:free", + "name": "Gemma 3 27B (free)", + "contextWindow": 131072, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "anthropic/claude-3.7-sonnet", + "name": "Claude Sonnet 3.7", + "contextWindow": 200000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 15, + "outputCost": 75 + }, + { + "id": "x-ai/grok-3", + "name": "Grok 3", + "contextWindow": 131072, + "maxOutput": 8192, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "x-ai/grok-3-mini-beta", + "name": "Grok 3 Mini Beta", + "contextWindow": 131072, + "maxOutput": 8192, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 0.5 + }, + { + "id": "x-ai/grok-3-mini", + "name": "Grok 3 Mini", + "contextWindow": 131072, + "maxOutput": 8192, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 0.5 + }, + { + "id": "x-ai/grok-3-beta", + "name": "Grok 3 Beta", + "contextWindow": 131072, + "maxOutput": 8192, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "qwen/qwen2.5-vl-72b-instruct", + "name": "Qwen2.5 VL 72B Instruct", + "contextWindow": 32768, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "deepseek/deepseek-r1-distill-llama-70b", + "name": "DeepSeek R1 Distill Llama 70B", + "contextWindow": 8192, + "maxOutput": 8192, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "prime-intellect/intellect-3", + "name": "Intellect 3", + "contextWindow": 131072, + "maxOutput": 8192, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.2, + "outputCost": 1.1 + }, + { + "id": "minimax/minimax-01", + "name": "MiniMax-01", + "contextWindow": 1000000, + "maxOutput": 1000000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.2, + "outputCost": 1.1 + }, + { + "id": "google/gemini-2.0-flash-001", + "name": "Gemini 2.0 Flash", + "contextWindow": 1048576, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.1, + "outputCost": 0.4 + }, + { + "id": "meta-llama/llama-3.3-70b-instruct:free", + "name": "Llama 3.3 70B Instruct (free)", + "contextWindow": 131072, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "qwen/qwen-2.5-coder-32b-instruct", + "name": "Qwen2.5 Coder 32B Instruct", + "contextWindow": 32768, + "maxOutput": 8192, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "anthropic/claude-3.5-haiku", + "name": "Claude Haiku 3.5", + "contextWindow": 200000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.8, + "outputCost": 4 + }, + { + "id": "meta-llama/llama-3.2-11b-vision-instruct", + "name": "Llama 3.2 11B Vision Instruct", + "contextWindow": 131072, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "meta-llama/llama-3.2-3b-instruct:free", + "name": "Llama 3.2 3B Instruct (free)", + "contextWindow": 131072, + "maxOutput": 131072, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "nousresearch/hermes-3-llama-3.1-405b:free", + "name": "Hermes 3 405B Instruct (free)", + "contextWindow": 131072, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "openai/gpt-4o-mini", + "name": "GPT-4o-mini", + "contextWindow": 128000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.15, + "outputCost": 0.6 + }, + { + "id": "google/gemma-2-9b-it", + "name": "Gemma 2 9B", + "contextWindow": 8192, + "maxOutput": 8192, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.03, + "outputCost": 0.09 + } + ] + }, + "azure": { + "name": "Azure", + "doc": "https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models", + "models": [ + { + "id": "gpt-5.4-nano", + "name": "GPT-5.4 Nano", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.2, + "outputCost": 1.25 + }, + { + "id": "gpt-5.4-mini", + "name": "GPT-5.4 Mini", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.75, + "outputCost": 4.5 + }, + { + "id": "gpt-5.4", + "name": "GPT-5.4", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 2.5, + "outputCost": 15 + }, + { + "id": "gpt-5.4-pro", + "name": "GPT-5.4 Pro", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 30, + "outputCost": 180 + }, + { + "id": "gpt-5.3-chat", + "name": "GPT-5.3 Chat", + "contextWindow": 128000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.75, + "outputCost": 14 + }, + { + "id": "gpt-5.3-codex", + "name": "GPT-5.3 Codex", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.75, + "outputCost": 14 + }, + { + "id": "kimi-k2.5", + "name": "Kimi K2.5", + "contextWindow": 262144, + "maxOutput": 262144, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 3 + }, + { + "id": "claude-opus-4-6", + "name": "Claude Opus 4.6", + "contextWindow": 200000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 5, + "outputCost": 25 + }, + { + "id": "gpt-5.2-codex", + "name": "GPT-5.2 Codex", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.75, + "outputCost": 14 + }, + { + "id": "gpt-5.2-chat", + "name": "GPT-5.2 Chat", + "contextWindow": 128000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.75, + "outputCost": 14 + }, + { + "id": "gpt-5.2", + "name": "GPT-5.2", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.75, + "outputCost": 14 + }, + { + "id": "kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "contextWindow": 262144, + "maxOutput": 262144, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 2.5 + }, + { + "id": "deepseek-v3.2-speciale", + "name": "DeepSeek-V3.2-Speciale", + "contextWindow": 128000, + "maxOutput": 128000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": false, + "inputCost": 0.58, + "outputCost": 1.68 + }, + { + "id": "deepseek-v3.2", + "name": "DeepSeek-V3.2", + "contextWindow": 128000, + "maxOutput": 128000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.58, + "outputCost": 1.68 + }, + { + "id": "claude-opus-4-1", + "name": "Claude Opus 4.1", + "contextWindow": 200000, + "maxOutput": 32000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 15, + "outputCost": 75 + }, + { + "id": "model-router", + "name": "Model Router", + "contextWindow": 128000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.14, + "outputCost": 0 + }, + { + "id": "claude-haiku-4-5", + "name": "Claude Haiku 4.5", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1, + "outputCost": 5 + }, + { + "id": "claude-sonnet-4-5", + "name": "Claude Sonnet 4.5", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "gpt-5.1", + "name": "GPT-5.1", + "contextWindow": 272000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "gpt-5.1-chat", + "name": "GPT-5.1 Chat", + "contextWindow": 128000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "gpt-5.1-codex-mini", + "name": "GPT-5.1 Codex Mini", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.25, + "outputCost": 2 + }, + { + "id": "gpt-5.1-codex", + "name": "GPT-5.1 Codex", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "gpt-5.1-codex-max", + "name": "GPT-5.1 Codex Max", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "gpt-5-pro", + "name": "GPT-5 Pro", + "contextWindow": 400000, + "maxOutput": 272000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 15, + "outputCost": 120 + }, + { + "id": "grok-4-fast-reasoning", + "name": "Grok 4 Fast (Reasoning)", + "contextWindow": 2000000, + "maxOutput": 30000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.2, + "outputCost": 0.5 + }, + { + "id": "grok-4-fast-non-reasoning", + "name": "Grok 4 Fast (Non-Reasoning)", + "contextWindow": 2000000, + "maxOutput": 30000, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.2, + "outputCost": 0.5 + }, + { + "id": "gpt-5-codex", + "name": "GPT-5-Codex", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "grok-code-fast-1", + "name": "Grok Code Fast 1", + "contextWindow": 256000, + "maxOutput": 10000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.2, + "outputCost": 1.5 + }, + { + "id": "deepseek-v3.1", + "name": "DeepSeek-V3.1", + "contextWindow": 131072, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.56, + "outputCost": 1.68 + }, + { + "id": "gpt-5-chat", + "name": "GPT-5 Chat", + "contextWindow": 128000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": false, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "gpt-5", + "name": "GPT-5", + "contextWindow": 272000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.25, + "outputCost": 10 + }, + { + "id": "gpt-5-mini", + "name": "GPT-5 Mini", + "contextWindow": 272000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.25, + "outputCost": 2 + }, + { + "id": "gpt-5-nano", + "name": "GPT-5 Nano", + "contextWindow": 272000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.05, + "outputCost": 0.4 + }, + { + "id": "claude-opus-4-5", + "name": "Claude Opus 4.5", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 5, + "outputCost": 25 + }, + { + "id": "grok-4", + "name": "Grok 4", + "contextWindow": 256000, + "maxOutput": 64000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "grok-4-1-fast-reasoning", + "name": "Grok 4.1 Fast (Reasoning)", + "contextWindow": 128000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.2, + "outputCost": 0.5 + }, + { + "id": "grok-4-1-fast-non-reasoning", + "name": "Grok 4.1 Fast (Non-Reasoning)", + "contextWindow": 128000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.2, + "outputCost": 0.5 + }, + { + "id": "deepseek-r1-0528", + "name": "DeepSeek-R1-0528", + "contextWindow": 163840, + "maxOutput": 163840, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.35, + "outputCost": 5.4 + }, + { + "id": "codex-mini", + "name": "Codex Mini", + "contextWindow": 200000, + "maxOutput": 100000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.5, + "outputCost": 6 + }, + { + "id": "mistral-medium-2505", + "name": "Mistral Medium 3", + "contextWindow": 128000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.4, + "outputCost": 2 + }, + { + "id": "o3", + "name": "o3", + "contextWindow": 200000, + "maxOutput": 100000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 2, + "outputCost": 8 + }, + { + "id": "o4-mini", + "name": "o4-mini", + "contextWindow": 200000, + "maxOutput": 100000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.1, + "outputCost": 4.4 + }, + { + "id": "cohere-embed-v-4-0", + "name": "Embed v4", + "contextWindow": 128000, + "maxOutput": 1536, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.12, + "outputCost": 0 + }, + { + "id": "gpt-4.1-nano", + "name": "GPT-4.1 nano", + "contextWindow": 1047576, + "maxOutput": 32768, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.1, + "outputCost": 0.4 + }, + { + "id": "gpt-4.1", + "name": "GPT-4.1", + "contextWindow": 1047576, + "maxOutput": 32768, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 2, + "outputCost": 8 + }, + { + "id": "gpt-4.1-mini", + "name": "GPT-4.1 mini", + "contextWindow": 1047576, + "maxOutput": 32768, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.4, + "outputCost": 1.6 + }, + { + "id": "llama-4-scout-17b-16e-instruct", + "name": "Llama 4 Scout 17B 16E Instruct", + "contextWindow": 128000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.2, + "outputCost": 0.78 + }, + { + "id": "llama-4-maverick-17b-128e-instruct-fp8", + "name": "Llama 4 Maverick 17B 128E Instruct FP8", + "contextWindow": 128000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.25, + "outputCost": 1 + }, + { + "id": "deepseek-v3-0324", + "name": "DeepSeek-V3-0324", + "contextWindow": 131072, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 1.14, + "outputCost": 4.56 + }, + { + "id": "cohere-command-a", + "name": "Command A", + "contextWindow": 256000, + "maxOutput": 8000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 2.5, + "outputCost": 10 + }, + { + "id": "mistral-small-2503", + "name": "Mistral Small 3.1", + "contextWindow": 128000, + "maxOutput": 32768, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.1, + "outputCost": 0.3 + }, + { + "id": "grok-3", + "name": "Grok 3", + "contextWindow": 131072, + "maxOutput": 8192, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "grok-3-mini", + "name": "Grok 3 Mini", + "contextWindow": 131072, + "maxOutput": 8192, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 0.5 + }, + { + "id": "o3-mini", + "name": "o3-mini", + "contextWindow": 200000, + "maxOutput": 100000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.1, + "outputCost": 4.4 + }, + { + "id": "mai-ds-r1", + "name": "MAI-DS-R1", + "contextWindow": 128000, + "maxOutput": 8192, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": false, + "inputCost": 1.35, + "outputCost": 5.4 + }, + { + "id": "deepseek-r1", + "name": "DeepSeek-R1", + "contextWindow": 163840, + "maxOutput": 163840, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": false, + "inputCost": 1.35, + "outputCost": 5.4 + }, + { + "id": "codestral-2501", + "name": "Codestral 25.01", + "contextWindow": 256000, + "maxOutput": 256000, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 0.9 + }, + { + "id": "phi-4-multimodal", + "name": "Phi-4-multimodal", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.08, + "outputCost": 0.32 + }, + { + "id": "phi-4-mini", + "name": "Phi-4-mini", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.075, + "outputCost": 0.3 + }, + { + "id": "phi-4", + "name": "Phi-4", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.125, + "outputCost": 0.5 + }, + { + "id": "phi-4-reasoning-plus", + "name": "Phi-4-reasoning-plus", + "contextWindow": 32000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": false, + "inputCost": 0.125, + "outputCost": 0.5 + }, + { + "id": "phi-4-mini-reasoning", + "name": "Phi-4-mini-reasoning", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.075, + "outputCost": 0.3 + }, + { + "id": "phi-4-reasoning", + "name": "Phi-4-reasoning", + "contextWindow": 32000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": false, + "inputCost": 0.125, + "outputCost": 0.5 + }, + { + "id": "llama-3.3-70b-instruct", + "name": "Llama-3.3-70B-Instruct", + "contextWindow": 128000, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.71, + "outputCost": 0.71 + }, + { + "id": "o1", + "name": "o1", + "contextWindow": 200000, + "maxOutput": 100000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 15, + "outputCost": 60 + }, + { + "id": "mistral-large-2411", + "name": "Mistral Large 24.11", + "contextWindow": 128000, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 2, + "outputCost": 6 + }, + { + "id": "ministral-3b", + "name": "Ministral 3B", + "contextWindow": 128000, + "maxOutput": 8192, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.04, + "outputCost": 0.04 + }, + { + "id": "llama-3.2-90b-vision-instruct", + "name": "Llama-3.2-90B-Vision-Instruct", + "contextWindow": 128000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 2.04, + "outputCost": 2.04 + }, + { + "id": "llama-3.2-11b-vision-instruct", + "name": "Llama-3.2-11B-Vision-Instruct", + "contextWindow": 128000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.37, + "outputCost": 0.37 + }, + { + "id": "o1-preview", + "name": "o1-preview", + "contextWindow": 128000, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 16.5, + "outputCost": 66 + }, + { + "id": "o1-mini", + "name": "o1-mini", + "contextWindow": 128000, + "maxOutput": 65536, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.1, + "outputCost": 4.4 + }, + { + "id": "cohere-command-r-plus-08-2024", + "name": "Command R+", + "contextWindow": 128000, + "maxOutput": 4000, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 2.5, + "outputCost": 10 + }, + { + "id": "cohere-command-r-08-2024", + "name": "Command R", + "contextWindow": 128000, + "maxOutput": 4000, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.15, + "outputCost": 0.6 + }, + { + "id": "phi-3.5-moe-instruct", + "name": "Phi-3.5-MoE-instruct", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.16, + "outputCost": 0.64 + }, + { + "id": "phi-3.5-mini-instruct", + "name": "Phi-3.5-mini-instruct", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.13, + "outputCost": 0.52 + }, + { + "id": "meta-llama-3.1-405b-instruct", + "name": "Meta-Llama-3.1-405B-Instruct", + "contextWindow": 128000, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 5.33, + "outputCost": 16 + }, + { + "id": "meta-llama-3.1-70b-instruct", + "name": "Meta-Llama-3.1-70B-Instruct", + "contextWindow": 128000, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 2.68, + "outputCost": 3.54 + }, + { + "id": "meta-llama-3.1-8b-instruct", + "name": "Meta-Llama-3.1-8B-Instruct", + "contextWindow": 128000, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 0.61 + }, + { + "id": "gpt-4o-mini", + "name": "GPT-4o mini", + "contextWindow": 128000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.15, + "outputCost": 0.6 + }, + { + "id": "mistral-nemo", + "name": "Mistral Nemo", + "contextWindow": 128000, + "maxOutput": 128000, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.15, + "outputCost": 0.15 + }, + { + "id": "gpt-4o", + "name": "GPT-4o", + "contextWindow": 128000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 2.5, + "outputCost": 10 + }, + { + "id": "phi-3-small-128k-instruct", + "name": "Phi-3-small-instruct (128k)", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.15, + "outputCost": 0.6 + }, + { + "id": "phi-3-medium-128k-instruct", + "name": "Phi-3-medium-instruct (128k)", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.17, + "outputCost": 0.68 + }, + { + "id": "phi-3-mini-4k-instruct", + "name": "Phi-3-mini-instruct (4k)", + "contextWindow": 4096, + "maxOutput": 1024, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.13, + "outputCost": 0.52 + }, + { + "id": "phi-3-medium-4k-instruct", + "name": "Phi-3-medium-instruct (4k)", + "contextWindow": 4096, + "maxOutput": 1024, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.17, + "outputCost": 0.68 + }, + { + "id": "phi-3-mini-128k-instruct", + "name": "Phi-3-mini-instruct (128k)", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.13, + "outputCost": 0.52 + }, + { + "id": "phi-3-small-8k-instruct", + "name": "Phi-3-small-instruct (8k)", + "contextWindow": 8192, + "maxOutput": 2048, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.15, + "outputCost": 0.6 + }, + { + "id": "meta-llama-3-8b-instruct", + "name": "Meta-Llama-3-8B-Instruct", + "contextWindow": 8192, + "maxOutput": 2048, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.3, + "outputCost": 0.61 + }, + { + "id": "meta-llama-3-70b-instruct", + "name": "Meta-Llama-3-70B-Instruct", + "contextWindow": 8192, + "maxOutput": 2048, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 2.68, + "outputCost": 3.54 + }, + { + "id": "gpt-4-turbo-vision", + "name": "GPT-4 Turbo Vision", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 10, + "outputCost": 30 + }, + { + "id": "gpt-4-turbo", + "name": "GPT-4 Turbo", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 10, + "outputCost": 30 + }, + { + "id": "text-embedding-3-small", + "name": "text-embedding-3-small", + "contextWindow": 8191, + "maxOutput": 1536, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.02, + "outputCost": 0 + }, + { + "id": "text-embedding-3-large", + "name": "text-embedding-3-large", + "contextWindow": 8191, + "maxOutput": 3072, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.13, + "outputCost": 0 + }, + { + "id": "gpt-3.5-turbo-0125", + "name": "GPT-3.5 Turbo 0125", + "contextWindow": 16384, + "maxOutput": 16384, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.5, + "outputCost": 1.5 + }, + { + "id": "cohere-embed-v3-multilingual", + "name": "Embed v3 Multilingual", + "contextWindow": 512, + "maxOutput": 1024, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.1, + "outputCost": 0 + }, + { + "id": "cohere-embed-v3-english", + "name": "Embed v3 English", + "contextWindow": 512, + "maxOutput": 1024, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.1, + "outputCost": 0 + }, + { + "id": "gpt-3.5-turbo-1106", + "name": "GPT-3.5 Turbo 1106", + "contextWindow": 16384, + "maxOutput": 16384, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 1, + "outputCost": 2 + }, + { + "id": "gpt-3.5-turbo-instruct", + "name": "GPT-3.5 Turbo Instruct", + "contextWindow": 4096, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 1.5, + "outputCost": 2 + }, + { + "id": "gpt-3.5-turbo-0613", + "name": "GPT-3.5 Turbo 0613", + "contextWindow": 16384, + "maxOutput": 16384, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 3, + "outputCost": 4 + }, + { + "id": "gpt-4-32k", + "name": "GPT-4 32K", + "contextWindow": 32768, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 60, + "outputCost": 120 + }, + { + "id": "gpt-4", + "name": "GPT-4", + "contextWindow": 8192, + "maxOutput": 8192, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 60, + "outputCost": 120 + }, + { + "id": "gpt-3.5-turbo-0301", + "name": "GPT-3.5 Turbo 0301", + "contextWindow": 4096, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 1.5, + "outputCost": 2 + }, + { + "id": "text-embedding-ada-002", + "name": "text-embedding-ada-002", + "contextWindow": 8192, + "maxOutput": 1536, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.1, + "outputCost": 0 + } + ] + }, + "bedrock": { + "name": "Amazon Bedrock", + "doc": "https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html", + "models": [ + { + "id": "eu.anthropic.claude-sonnet-4-6", + "name": "Claude Sonnet 4.6 (EU)", + "contextWindow": 1000000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "anthropic.claude-sonnet-4-6", + "name": "Claude Sonnet 4.6", + "contextWindow": 1000000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "global.anthropic.claude-opus-4-6-v1", + "name": "Claude Opus 4.6 (Global)", + "contextWindow": 1000000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 5, + "outputCost": 25 + }, + { + "id": "minimax.minimax-m2.5", + "name": "MiniMax M2.5", + "contextWindow": 1000000, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 1.2 + }, + { + "id": "us.anthropic.claude-opus-4-6-v1", + "name": "Claude Opus 4.6 (US)", + "contextWindow": 1000000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 5, + "outputCost": 25 + }, + { + "id": "anthropic.claude-opus-4-6-v1", + "name": "Claude Opus 4.6", + "contextWindow": 1000000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 5, + "outputCost": 25 + }, + { + "id": "global.anthropic.claude-sonnet-4-6", + "name": "Claude Sonnet 4.6 (Global)", + "contextWindow": 1000000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "us.anthropic.claude-sonnet-4-6", + "name": "Claude Sonnet 4.6 (US)", + "contextWindow": 1000000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "zai.glm-5", + "name": "GLM-5", + "contextWindow": 200000, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1, + "outputCost": 3.2 + }, + { + "id": "eu.anthropic.claude-opus-4-6-v1", + "name": "Claude Opus 4.6 (EU)", + "contextWindow": 1000000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 5, + "outputCost": 25 + }, + { + "id": "mistral.devstral-2-123b", + "name": "Devstral 2 123B", + "contextWindow": 256000, + "maxOutput": 8192, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.4, + "outputCost": 2 + }, + { + "id": "deepseek.v3.2", + "name": "DeepSeek-V3.2", + "contextWindow": 163840, + "maxOutput": 81920, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.62, + "outputCost": 1.85 + }, + { + "id": "moonshotai.kimi-k2.5", + "name": "Kimi K2.5", + "contextWindow": 256000, + "maxOutput": 256000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 3 + }, + { + "id": "zai.glm-4.7-flash", + "name": "GLM-4.7-Flash", + "contextWindow": 200000, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.07, + "outputCost": 0.4 + }, + { + "id": "minimax.minimax-m2.1", + "name": "MiniMax M2.1", + "contextWindow": 204800, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 1.2 + }, + { + "id": "nvidia.nemotron-nano-3-30b", + "name": "NVIDIA Nemotron Nano 3 30B", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.06, + "outputCost": 0.24 + }, + { + "id": "zai.glm-4.7", + "name": "GLM-4.7", + "contextWindow": 204800, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 2.2 + }, + { + "id": "mistral.mistral-large-3-675b-instruct", + "name": "Mistral Large 3", + "contextWindow": 256000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.5, + "outputCost": 1.5 + }, + { + "id": "mistral.ministral-3-3b-instruct", + "name": "Ministral 3 3B", + "contextWindow": 256000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.1, + "outputCost": 0.1 + }, + { + "id": "moonshot.kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "contextWindow": 256000, + "maxOutput": 256000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 2.5 + }, + { + "id": "mistral.magistral-small-2509", + "name": "Magistral Small 1.2", + "contextWindow": 128000, + "maxOutput": 40000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.5, + "outputCost": 1.5 + }, + { + "id": "qwen.qwen3-vl-235b-a22b", + "name": "Qwen/Qwen3-VL-235B-A22B-Instruct", + "contextWindow": 262000, + "maxOutput": 262000, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 1.5 + }, + { + "id": "qwen.qwen3-next-80b-a3b", + "name": "Qwen/Qwen3-Next-80B-A3B-Instruct", + "contextWindow": 262000, + "maxOutput": 262000, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.14, + "outputCost": 1.4 + }, + { + "id": "minimax.minimax-m2", + "name": "MiniMax M2", + "contextWindow": 204608, + "maxOutput": 128000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.3, + "outputCost": 1.2 + }, + { + "id": "eu.anthropic.claude-haiku-4-5-20251001-v1:0", + "name": "Claude Haiku 4.5 (EU)", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1, + "outputCost": 5 + }, + { + "id": "global.anthropic.claude-haiku-4-5-20251001-v1:0", + "name": "Claude Haiku 4.5 (Global)", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1, + "outputCost": 5 + }, + { + "id": "us.anthropic.claude-haiku-4-5-20251001-v1:0", + "name": "Claude Haiku 4.5 (US)", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1, + "outputCost": 5 + }, + { + "id": "anthropic.claude-haiku-4-5-20251001-v1:0", + "name": "Claude Haiku 4.5", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1, + "outputCost": 5 + }, + { + "id": "eu.anthropic.claude-sonnet-4-5-20250929-v1:0", + "name": "Claude Sonnet 4.5 (EU)", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "anthropic.claude-sonnet-4-5-20250929-v1:0", + "name": "Claude Sonnet 4.5", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "us.anthropic.claude-sonnet-4-5-20250929-v1:0", + "name": "Claude Sonnet 4.5 (US)", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "global.anthropic.claude-sonnet-4-5-20250929-v1:0", + "name": "Claude Sonnet 4.5 (Global)", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "qwen.qwen3-coder-480b-a35b-v1:0", + "name": "Qwen3 Coder 480B A35B Instruct", + "contextWindow": 131072, + "maxOutput": 65536, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.22, + "outputCost": 1.8 + }, + { + "id": "deepseek.v3-v1:0", + "name": "DeepSeek-V3.1", + "contextWindow": 163840, + "maxOutput": 81920, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.58, + "outputCost": 1.68 + }, + { + "id": "qwen.qwen3-coder-30b-a3b-v1:0", + "name": "Qwen3 Coder 30B A3B Instruct", + "contextWindow": 262144, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.15, + "outputCost": 0.6 + }, + { + "id": "qwen.qwen3-235b-a22b-2507-v1:0", + "name": "Qwen3 235B A22B 2507", + "contextWindow": 262144, + "maxOutput": 131072, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.22, + "outputCost": 0.88 + }, + { + "id": "qwen.qwen3-32b-v1:0", + "name": "Qwen3 32B (dense)", + "contextWindow": 16384, + "maxOutput": 16384, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.15, + "outputCost": 0.6 + }, + { + "id": "anthropic.claude-opus-4-1-20250805-v1:0", + "name": "Claude Opus 4.1", + "contextWindow": 200000, + "maxOutput": 32000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 15, + "outputCost": 75 + }, + { + "id": "us.anthropic.claude-opus-4-1-20250805-v1:0", + "name": "Claude Opus 4.1 (US)", + "contextWindow": 200000, + "maxOutput": 32000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 15, + "outputCost": 75 + }, + { + "id": "global.anthropic.claude-opus-4-5-20251101-v1:0", + "name": "Claude Opus 4.5 (Global)", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 5, + "outputCost": 25 + }, + { + "id": "us.anthropic.claude-opus-4-5-20251101-v1:0", + "name": "Claude Opus 4.5 (US)", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 5, + "outputCost": 25 + }, + { + "id": "eu.anthropic.claude-opus-4-5-20251101-v1:0", + "name": "Claude Opus 4.5 (EU)", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 5, + "outputCost": 25 + }, + { + "id": "anthropic.claude-opus-4-5-20251101-v1:0", + "name": "Claude Opus 4.5", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 5, + "outputCost": 25 + }, + { + "id": "google.gemma-3-27b-it", + "name": "Google Gemma 3 27B Instruct", + "contextWindow": 202752, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.12, + "outputCost": 0.2 + }, + { + "id": "mistral.voxtral-small-24b-2507", + "name": "Voxtral Small 24B 2507", + "contextWindow": 32000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.15, + "outputCost": 0.35 + }, + { + "id": "deepseek.r1-v1:0", + "name": "DeepSeek-R1", + "contextWindow": 128000, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.35, + "outputCost": 5.4 + }, + { + "id": "us.anthropic.claude-opus-4-20250514-v1:0", + "name": "Claude Opus 4 (US)", + "contextWindow": 200000, + "maxOutput": 32000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 15, + "outputCost": 75 + }, + { + "id": "anthropic.claude-sonnet-4-20250514-v1:0", + "name": "Claude Sonnet 4", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "anthropic.claude-opus-4-20250514-v1:0", + "name": "Claude Opus 4", + "contextWindow": 200000, + "maxOutput": 32000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 15, + "outputCost": 75 + }, + { + "id": "us.anthropic.claude-sonnet-4-20250514-v1:0", + "name": "Claude Sonnet 4 (US)", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "global.anthropic.claude-sonnet-4-20250514-v1:0", + "name": "Claude Sonnet 4 (Global)", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "eu.anthropic.claude-sonnet-4-20250514-v1:0", + "name": "Claude Sonnet 4 (EU)", + "contextWindow": 200000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "writer.palmyra-x4-v1:0", + "name": "Palmyra X4", + "contextWindow": 122880, + "maxOutput": 8192, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 2.5, + "outputCost": 10 + }, + { + "id": "writer.palmyra-x5-v1:0", + "name": "Palmyra X5", + "contextWindow": 1040000, + "maxOutput": 8192, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 6 + }, + { + "id": "mistral.pixtral-large-2502-v1:0", + "name": "Pixtral Large (25.02)", + "contextWindow": 128000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 2, + "outputCost": 6 + }, + { + "id": "meta.llama4-maverick-17b-instruct-v1:0", + "name": "Llama 4 Maverick 17B Instruct", + "contextWindow": 1000000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.24, + "outputCost": 0.97 + }, + { + "id": "meta.llama4-scout-17b-instruct-v1:0", + "name": "Llama 4 Scout 17B Instruct", + "contextWindow": 3500000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.17, + "outputCost": 0.66 + }, + { + "id": "anthropic.claude-3-7-sonnet-20250219-v1:0", + "name": "Claude Sonnet 3.7", + "contextWindow": 200000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "meta.llama3-3-70b-instruct-v1:0", + "name": "Llama 3.3 70B Instruct", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.72, + "outputCost": 0.72 + }, + { + "id": "amazon.nova-lite-v1:0", + "name": "Nova Lite", + "contextWindow": 300000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.06, + "outputCost": 0.24 + }, + { + "id": "amazon.nova-micro-v1:0", + "name": "Nova Micro", + "contextWindow": 128000, + "maxOutput": 8192, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.035, + "outputCost": 0.14 + }, + { + "id": "amazon.nova-pro-v1:0", + "name": "Nova Pro", + "contextWindow": 300000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.8, + "outputCost": 3.2 + }, + { + "id": "amazon.nova-premier-v1:0", + "name": "Nova Premier", + "contextWindow": 1000000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 2.5, + "outputCost": 12.5 + }, + { + "id": "openai.gpt-oss-120b-1:0", + "name": "gpt-oss-120b", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.15, + "outputCost": 0.6 + }, + { + "id": "nvidia.nemotron-nano-12b-v2", + "name": "NVIDIA Nemotron Nano 12B v2 VL BF16", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.2, + "outputCost": 0.6 + }, + { + "id": "mistral.ministral-3-8b-instruct", + "name": "Ministral 3 8B", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.15, + "outputCost": 0.15 + }, + { + "id": "openai.gpt-oss-safeguard-20b", + "name": "GPT OSS Safeguard 20B", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.07, + "outputCost": 0.2 + }, + { + "id": "google.gemma-3-12b-it", + "name": "Google Gemma 3 12B", + "contextWindow": 131072, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": false, + "inputCost": 0.049999999999999996, + "outputCost": 0.09999999999999999 + }, + { + "id": "mistral.ministral-3-14b-instruct", + "name": "Ministral 14B 3.0", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.2, + "outputCost": 0.2 + }, + { + "id": "google.gemma-3-4b-it", + "name": "Gemma 3 4B IT", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.04, + "outputCost": 0.08 + }, + { + "id": "nvidia.nemotron-nano-9b-v2", + "name": "NVIDIA Nemotron Nano 9B v2", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.06, + "outputCost": 0.23 + }, + { + "id": "openai.gpt-oss-20b-1:0", + "name": "gpt-oss-20b", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.07, + "outputCost": 0.3 + }, + { + "id": "openai.gpt-oss-safeguard-120b", + "name": "GPT OSS Safeguard 120B", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.15, + "outputCost": 0.6 + }, + { + "id": "amazon.nova-2-lite-v1:0", + "name": "Nova 2 Lite", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.33, + "outputCost": 2.75 + }, + { + "id": "mistral.voxtral-mini-3b-2507", + "name": "Voxtral Mini 3B 2507", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.04, + "outputCost": 0.04 + }, + { + "id": "anthropic.claude-3-5-sonnet-20241022-v2:0", + "name": "Claude Sonnet 3.5 v2", + "contextWindow": 200000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "anthropic.claude-3-5-haiku-20241022-v1:0", + "name": "Claude Haiku 3.5", + "contextWindow": 200000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.8, + "outputCost": 4 + }, + { + "id": "meta.llama3-2-90b-instruct-v1:0", + "name": "Llama 3.2 90B Instruct", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.72, + "outputCost": 0.72 + }, + { + "id": "meta.llama3-2-1b-instruct-v1:0", + "name": "Llama 3.2 1B Instruct", + "contextWindow": 131000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.1, + "outputCost": 0.1 + }, + { + "id": "meta.llama3-2-11b-instruct-v1:0", + "name": "Llama 3.2 11B Instruct", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.16, + "outputCost": 0.16 + }, + { + "id": "meta.llama3-2-3b-instruct-v1:0", + "name": "Llama 3.2 3B Instruct", + "contextWindow": 131000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.15, + "outputCost": 0.15 + }, + { + "id": "meta.llama3-1-70b-instruct-v1:0", + "name": "Llama 3.1 70B Instruct", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.72, + "outputCost": 0.72 + }, + { + "id": "meta.llama3-1-8b-instruct-v1:0", + "name": "Llama 3.1 8B Instruct", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.22, + "outputCost": 0.22 + }, + { + "id": "meta.llama3-1-405b-instruct-v1:0", + "name": "Llama 3.1 405B Instruct", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 2.4, + "outputCost": 2.4 + }, + { + "id": "anthropic.claude-3-5-sonnet-20240620-v1:0", + "name": "Claude Sonnet 3.5", + "contextWindow": 200000, + "maxOutput": 8192, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 3, + "outputCost": 15 + }, + { + "id": "anthropic.claude-3-haiku-20240307-v1:0", + "name": "Claude Haiku 3", + "contextWindow": 200000, + "maxOutput": 4096, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.25, + "outputCost": 1.25 + } + ] + }, + "lmstudio": { + "name": "LMStudio", + "api": "http://127.0.0.1:1234/v1", + "doc": "https://lmstudio.ai/models", + "models": [ + { + "id": "openai/gpt-oss-20b", + "name": "GPT OSS 20B", + "contextWindow": 131072, + "maxOutput": 32768, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "qwen/qwen3-30b-a3b-2507", + "name": "Qwen3 30B A3B 2507", + "contextWindow": 262144, + "maxOutput": 16384, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "qwen/qwen3-coder-30b", + "name": "Qwen3 Coder 30B", + "contextWindow": 262144, + "maxOutput": 65536, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + } + ] + }, + "moonshot": { + "name": "Moonshot AI", + "api": "https://api.moonshot.ai/v1", + "doc": "https://platform.moonshot.ai/docs/api/chat", + "models": [ + { + "id": "kimi-k2.5", + "name": "Kimi K2.5", + "contextWindow": 262144, + "maxOutput": 262144, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 3 + }, + { + "id": "kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "contextWindow": 262144, + "maxOutput": 262144, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 2.5 + }, + { + "id": "kimi-k2-thinking-turbo", + "name": "Kimi K2 Thinking Turbo", + "contextWindow": 262144, + "maxOutput": 262144, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 1.15, + "outputCost": 8 + }, + { + "id": "kimi-k2-0905-preview", + "name": "Kimi K2 0905", + "contextWindow": 262144, + "maxOutput": 262144, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 2.5 + }, + { + "id": "kimi-k2-turbo-preview", + "name": "Kimi K2 Turbo", + "contextWindow": 262144, + "maxOutput": 262144, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 2.4, + "outputCost": 10 + }, + { + "id": "kimi-k2-0711-preview", + "name": "Kimi K2 0711", + "contextWindow": 131072, + "maxOutput": 16384, + "supportsImages": false, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0.6, + "outputCost": 2.5 + } + ] + }, + "github-copilot": { + "name": "GitHub Copilot", + "api": "https://api.githubcopilot.com", + "doc": "https://docs.github.com/en/copilot", + "models": [ + { + "id": "gpt-5.4-mini", + "name": "GPT-5.4 mini", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "gpt-5.4", + "name": "GPT-5.4", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "gpt-5.3-codex", + "name": "GPT-5.3-Codex", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "gemini-3.1-pro-preview", + "name": "Gemini 3.1 Pro Preview", + "contextWindow": 128000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "claude-sonnet-4.6", + "name": "Claude Sonnet 4.6", + "contextWindow": 200000, + "maxOutput": 32000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "claude-opus-4.6", + "name": "Claude Opus 4.6", + "contextWindow": 144000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "gemini-3-flash-preview", + "name": "Gemini 3 Flash", + "contextWindow": 128000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "gpt-5.2-codex", + "name": "GPT-5.2-Codex", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "gpt-5.2", + "name": "GPT-5.2", + "contextWindow": 264000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "gpt-5.1-codex-max", + "name": "GPT-5.1-Codex-max", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "gemini-3-pro-preview", + "name": "Gemini 3 Pro Preview", + "contextWindow": 128000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "gpt-5.1", + "name": "GPT-5.1", + "contextWindow": 264000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "gpt-5.1-codex-mini", + "name": "GPT-5.1-Codex-mini", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "gpt-5.1-codex", + "name": "GPT-5.1-Codex", + "contextWindow": 400000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "claude-haiku-4.5", + "name": "Claude Haiku 4.5", + "contextWindow": 144000, + "maxOutput": 32000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "claude-sonnet-4.5", + "name": "Claude Sonnet 4.5", + "contextWindow": 144000, + "maxOutput": 32000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "grok-code-fast-1", + "name": "Grok Code Fast 1", + "contextWindow": 128000, + "maxOutput": 64000, + "supportsImages": false, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "gpt-5-mini", + "name": "GPT-5-mini", + "contextWindow": 264000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "gpt-5", + "name": "GPT-5", + "contextWindow": 128000, + "maxOutput": 128000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "claude-opus-41", + "name": "Claude Opus 4.1", + "contextWindow": 80000, + "maxOutput": 16000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": false, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "claude-opus-4.5", + "name": "Claude Opus 4.5", + "contextWindow": 160000, + "maxOutput": 32000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "gemini-2.5-pro", + "name": "Gemini 2.5 Pro", + "contextWindow": 128000, + "maxOutput": 64000, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "claude-sonnet-4", + "name": "Claude Sonnet 4", + "contextWindow": 216000, + "maxOutput": 16000, + "supportsImages": true, + "supportsReasoning": true, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "gpt-4.1", + "name": "GPT-4.1", + "contextWindow": 128000, + "maxOutput": 16384, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + }, + { + "id": "gpt-4o", + "name": "GPT-4o", + "contextWindow": 128000, + "maxOutput": 4096, + "supportsImages": true, + "supportsReasoning": false, + "supportsToolCall": true, + "inputCost": 0, + "outputCost": 0 + } + ] + } +} diff --git a/packages/browseros-agent/apps/agent/lib/llm-providers/models-dev.ts b/packages/browseros-agent/apps/agent/lib/llm-providers/models-dev.ts new file mode 100644 index 000000000..b52dcced9 --- /dev/null +++ b/packages/browseros-agent/apps/agent/lib/llm-providers/models-dev.ts @@ -0,0 +1,35 @@ +import data from './models-dev-data.json' + +export interface ModelsDevModel { + id: string + name: string + contextWindow: number + maxOutput: number + supportsImages: boolean + supportsReasoning: boolean + supportsToolCall: boolean + inputCost?: number + outputCost?: number +} + +export interface ModelsDevProvider { + name: string + api?: string + doc: string + models: ModelsDevModel[] +} + +const modelsDevData: Record = data as Record< + string, + ModelsDevProvider +> + +export function getModelsDevProvider( + providerId: string, +): ModelsDevProvider | undefined { + return modelsDevData[providerId] +} + +export function getModelsDevModels(providerId: string): ModelsDevModel[] { + return modelsDevData[providerId]?.models ?? [] +} diff --git a/packages/browseros-agent/apps/agent/lib/llm-providers/providerTemplates.ts b/packages/browseros-agent/apps/agent/lib/llm-providers/providerTemplates.ts index 37ba9c8c0..4d8799b45 100644 --- a/packages/browseros-agent/apps/agent/lib/llm-providers/providerTemplates.ts +++ b/packages/browseros-agent/apps/agent/lib/llm-providers/providerTemplates.ts @@ -1,3 +1,4 @@ +import { getModelsDevProvider } from './models-dev' import type { ProviderType } from './types' /** @@ -15,6 +16,30 @@ export interface ProviderTemplate { apiKeyUrl?: string } +function enrichTemplate( + providerId: ProviderType, + overrides: { + defaultModelId: string + defaultBaseUrl?: string + apiKeyUrl?: string + setupGuideUrl?: string + }, +): ProviderTemplate { + const provider = getModelsDevProvider(providerId) + const model = provider?.models.find((m) => m.id === overrides.defaultModelId) + + return { + id: providerId, + name: provider?.name ?? providerId, + defaultBaseUrl: overrides.defaultBaseUrl ?? provider?.api ?? '', + defaultModelId: overrides.defaultModelId, + supportsImages: model?.supportsImages ?? true, + contextWindow: model?.contextWindow ?? 128000, + ...(overrides.apiKeyUrl && { apiKeyUrl: overrides.apiKeyUrl }), + ...(overrides.setupGuideUrl && { setupGuideUrl: overrides.setupGuideUrl }), + } +} + /** * Available provider templates for quick setup * @public @@ -57,17 +82,12 @@ export const providerTemplates: ProviderTemplate[] = [ apiKeyUrl: 'https://platform.moonshot.ai/console/api-keys', setupGuideUrl: 'https://platform.moonshot.ai/console/api-keys', }, - { - id: 'openai', - name: 'OpenAI', - defaultBaseUrl: 'https://api.openai.com/v1', - defaultModelId: 'gpt-4', - supportsImages: true, - contextWindow: 128000, + enrichTemplate('openai', { + defaultModelId: 'gpt-5', apiKeyUrl: 'https://platform.openai.com/api-keys', setupGuideUrl: 'https://docs.browseros.com/features/bring-your-own-llm#openai', - }, + }), { id: 'openai-compatible', name: 'OpenAI Compatible', @@ -76,28 +96,18 @@ export const providerTemplates: ProviderTemplate[] = [ supportsImages: true, contextWindow: 128000, }, - { - id: 'anthropic', - name: 'Anthropic', - defaultBaseUrl: 'https://api.anthropic.com/v1', - defaultModelId: 'claude-3-5-sonnet-20241022', - supportsImages: true, - contextWindow: 200000, + enrichTemplate('anthropic', { + defaultModelId: 'claude-sonnet-4-6', apiKeyUrl: 'https://console.anthropic.com/settings/keys', setupGuideUrl: 'https://docs.browseros.com/features/bring-your-own-llm#claude', - }, - { - id: 'google', - name: 'Gemini', - defaultBaseUrl: 'https://generativelanguage.googleapis.com/v1beta', - defaultModelId: 'gemini-1.5-pro', - supportsImages: true, - contextWindow: 1000000, + }), + enrichTemplate('google', { + defaultModelId: 'gemini-2.5-flash', apiKeyUrl: 'https://aistudio.google.com/app/apikey', setupGuideUrl: 'https://docs.browseros.com/features/bring-your-own-llm#gemini', - }, + }), { id: 'ollama', name: 'Ollama', @@ -108,47 +118,28 @@ export const providerTemplates: ProviderTemplate[] = [ setupGuideUrl: 'https://docs.browseros.com/features/bring-your-own-llm#ollama', }, - { - id: 'openrouter', - name: 'OpenRouter', - defaultBaseUrl: 'https://openrouter.ai/api/v1', - defaultModelId: 'openai/gpt-4-turbo', - supportsImages: true, - contextWindow: 128000, + enrichTemplate('openrouter', { + defaultModelId: 'anthropic/claude-sonnet-4.5', apiKeyUrl: 'https://openrouter.ai/keys', setupGuideUrl: 'https://docs.browseros.com/features/bring-your-own-llm#openrouter', - }, - { - id: 'lmstudio', - name: 'LM Studio', + }), + enrichTemplate('lmstudio', { + defaultModelId: 'openai/gpt-oss-20b', defaultBaseUrl: 'http://localhost:1234/v1', - defaultModelId: 'local-model', - supportsImages: false, - contextWindow: 32000, setupGuideUrl: 'https://docs.browseros.com/features/bring-your-own-llm#lmstudio', - }, - { - id: 'azure', - name: 'Azure', - defaultBaseUrl: '', + }), + enrichTemplate('azure', { defaultModelId: '', - supportsImages: true, - contextWindow: 128000, apiKeyUrl: 'https://portal.azure.com/#view/Microsoft_Azure_ProjectOxford/CognitiveServicesHub/~/OpenAI', - }, - { - id: 'bedrock', - name: 'AWS Bedrock', - defaultBaseUrl: '', - defaultModelId: '', - supportsImages: true, - contextWindow: 200000, + }), + enrichTemplate('bedrock', { + defaultModelId: 'anthropic.claude-sonnet-4-6', setupGuideUrl: 'https://docs.aws.amazon.com/bedrock/latest/userguide/getting-started.html', - }, + }), ] /** diff --git a/packages/browseros-agent/apps/eval/src/dashboard/viewer.html b/packages/browseros-agent/apps/eval/src/dashboard/viewer.html index aafa27bef..34896a7dd 100644 --- a/packages/browseros-agent/apps/eval/src/dashboard/viewer.html +++ b/packages/browseros-agent/apps/eval/src/dashboard/viewer.html @@ -1225,7 +1225,7 @@ const score = graders[firstKey].score; if (typeof score === 'number') { const pct = Math.round(score * 100); - return { label: pct + '%', cls: pct >= 75 ? 'pass' : 'fail' }; + return { label: `${pct}%`, cls: pct >= 75 ? 'pass' : 'fail' }; } const anyPass = keys.some((k) => graders[k].pass); return { label: anyPass ? 'PASS' : 'FAIL', cls: anyPass ? 'pass' : 'fail' }; diff --git a/packages/browseros-agent/package.json b/packages/browseros-agent/package.json index 151342fe7..822ec03b8 100644 --- a/packages/browseros-agent/package.json +++ b/packages/browseros-agent/package.json @@ -34,6 +34,7 @@ "lint": "bunx biome check", "lint:fix": "bunx biome check --write --unsafe", "gen:cdp": "bun scripts/codegen/cdp-protocol.ts", + "generate:models": "bun scripts/generate-models.ts", "clean": "rimraf dist" }, "repository": "browseros-ai/BrowserOS-server", diff --git a/packages/browseros-agent/scripts/generate-models.ts b/packages/browseros-agent/scripts/generate-models.ts new file mode 100644 index 000000000..2644a45fd --- /dev/null +++ b/packages/browseros-agent/scripts/generate-models.ts @@ -0,0 +1,145 @@ +/** + * Fetches models.dev/api.json and generates a compact models data file + * for BrowserOS. Run: bun scripts/generate-models.ts + */ + +const API_URL = 'https://models.dev/api.json' +const OUTPUT_PATH = new URL( + '../apps/agent/lib/llm-providers/models-dev-data.json', + import.meta.url, +).pathname + +interface ModelsDevModel { + id: string + name: string + family?: string + attachment: boolean + reasoning: boolean + tool_call: boolean + structured_output?: boolean + modalities: { input: string[]; output: string[] } + cost?: { + input: number + output: number + cache_read?: number + cache_write?: number + } + limit: { context: number; output: number; input?: number } + status?: string + release_date: string + last_updated: string +} + +interface ModelsDevProvider { + id: string + name: string + npm: string + api?: string + doc: string + env: string[] + models: Record +} + +interface OutputModel { + id: string + name: string + contextWindow: number + maxOutput: number + supportsImages: boolean + supportsReasoning: boolean + supportsToolCall: boolean + inputCost?: number + outputCost?: number +} + +interface OutputProvider { + name: string + api?: string + doc: string + models: OutputModel[] +} + +// models.dev ID → BrowserOS provider ID +const PROVIDER_MAP: Record = { + anthropic: 'anthropic', + openai: 'openai', + google: 'google', + openrouter: 'openrouter', + azure: 'azure', + 'amazon-bedrock': 'bedrock', + lmstudio: 'lmstudio', + moonshotai: 'moonshot', + 'github-copilot': 'github-copilot', +} + +function transformModel(model: ModelsDevModel): OutputModel | null { + if (model.status === 'deprecated') return null + + const supportsImages = + model.attachment || model.modalities.input.includes('image') + + return { + id: model.id, + name: model.name, + contextWindow: model.limit.context, + maxOutput: model.limit.output, + supportsImages, + supportsReasoning: model.reasoning, + supportsToolCall: model.tool_call, + ...(model.cost && { + inputCost: model.cost.input, + outputCost: model.cost.output, + }), + } +} + +async function main() { + console.log(`Fetching ${API_URL}...`) + const response = await fetch(API_URL) + if (!response.ok) throw new Error(`Failed to fetch: ${response.status}`) + + const data: Record = await response.json() + console.log(`Fetched ${Object.keys(data).length} providers`) + + const output: Record = {} + + for (const [modelsDevId, browserosId] of Object.entries(PROVIDER_MAP)) { + const provider = data[modelsDevId] + if (!provider) { + console.warn(`Provider not found in models.dev: ${modelsDevId}`) + continue + } + + const models = Object.values(provider.models) + .map(transformModel) + .filter((m): m is OutputModel => m !== null) + .sort((a, b) => { + const dateA = provider.models[a.id]?.last_updated ?? '' + const dateB = provider.models[b.id]?.last_updated ?? '' + return dateB.localeCompare(dateA) + }) + + output[browserosId] = { + name: provider.name, + ...(provider.api && { api: provider.api }), + doc: provider.doc, + models, + } + } + + const totalModels = Object.values(output).reduce( + (sum, p) => sum + p.models.length, + 0, + ) + console.log( + `Generated ${Object.keys(output).length} providers with ${totalModels} models`, + ) + + await Bun.write(OUTPUT_PATH, JSON.stringify(output, null, 2)) + console.log(`Written to ${OUTPUT_PATH}`) +} + +main().catch((err) => { + console.error(err) + process.exit(1) +})