diff --git a/.changeset/provider-model-catalogs.md b/.changeset/provider-model-catalogs.md new file mode 100644 index 0000000000..34c773b6a6 --- /dev/null +++ b/.changeset/provider-model-catalogs.md @@ -0,0 +1,20 @@ +--- +'@tanstack/ai': minor +'@tanstack/ai-anthropic': minor +'@tanstack/ai-bedrock': minor +'@tanstack/ai-cloudflare': minor +'@tanstack/ai-gemini': minor +'@tanstack/ai-grok': minor +'@tanstack/ai-groq': minor +'@tanstack/ai-mistral': minor +'@tanstack/ai-openai': minor +'@tanstack/ai-openrouter': minor +'@tanstack/ai-vercel-gateway': minor +'@tanstack/ai-vertex': minor +--- + +Each provider package exports its model catalog at `./models`, for example `import { models } from '@tanstack/ai-anthropic/models'`. A record has the model's `id`, `name`, `input` modalities, `contextWindow`, `maxOutputTokens`, `prices`, and `reasoning` levels. `@tanstack/ai-openai` also exports `./azure-models`, and `@tanstack/ai-cloudflare` also exports `./gateway-models`. + +`@tanstack/ai` adds the `ModelRecord` type and `modelCost(model, usage)`. `modelCost` prices one call from its `TokenUsage`, with long-context tiers and 1-hour cache writes. It returns `undefined` when the call used tokens that have no known price. + +The data comes from modelschemas, and a daily job syncs it. A value that modelschemas does not list is `undefined`, never `0`. diff --git a/.github/workflows/sync-models.yml b/.github/workflows/sync-models.yml index 54a6cc1e78..48afb3638f 100644 --- a/.github/workflows/sync-models.yml +++ b/.github/workflows/sync-models.yml @@ -54,6 +54,13 @@ jobs: env: MODELSCHEMAS_API_KEY: ${{ secrets.MODELSCHEMAS_API_KEY }} + - name: Sync model catalogs + id: catalogs + continue-on-error: true + run: pnpm generate:models:catalogs + env: + MODELSCHEMAS_API_KEY: ${{ secrets.MODELSCHEMAS_API_KEY }} + - name: Format run: pnpm format @@ -101,6 +108,7 @@ jobs: - Converts to the internal adapter format - Inserts new native-provider models from modelschemas (`@modelschemas/client`) - Inserts new ElevenLabs text-to-speech, music, sound-effect, and voice-design models from modelschemas + - Writes each provider package's `./models` catalog (prices, limits, reasoning levels) from modelschemas - Creates a patch changeset for all changed packages PRBODY ) @@ -116,7 +124,8 @@ jobs: steps.fetch.outcome == 'failure' || steps.convert.outcome == 'failure' || steps.elevenlabs.outcome == 'failure' || - steps.provider.outcome == 'failure' + steps.provider.outcome == 'failure' || + steps.catalogs.outcome == 'failure' run: | echo "::error::A model sync step failed. Passing steps were still committed." exit 1 @@ -130,7 +139,8 @@ jobs: fetch=${{ steps.fetch.outcome }}, convert=${{ steps.convert.outcome }}, elevenlabs=${{ steps.elevenlabs.outcome }}, - provider=${{ steps.provider.outcome }} + provider=${{ steps.provider.outcome }}, + catalogs=${{ steps.catalogs.outcome }} shell: bash run: | gh label create sync-models --color B60205 --description "Daily model sync failures" --force diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f14c0c483c..5eafb731b2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -57,7 +57,8 @@ For deeper architecture details (adapter system, isomorphic tools, framework int 2. Regenerates `packages/ai-openrouter/src/model-meta.ts` and the Vercel Gateway and Neon model lists. 3. Inserts **new** native-provider models from [modelschemas](https://modelschemas.com) (`@modelschemas/client`) into `ai-openai`, `ai-anthropic`, `ai-gemini`, `ai-grok`, `ai-groq`, `ai-mistral`, and `ai-byteplus`. Native ids, activity, limits, modalities, pricing, and capabilities come from each provider catalog. OpenRouter fills a field only when the native row left it empty. OpenAI, Anthropic, Gemini, and Grok hold an id back until the OpenRouter catalog has a matching row and both prices are known. The log names each held-back id. Groq and Mistral insert even when a price is unknown: the generator leaves that price out (`pricing: {}` when both are unknown) and never writes `0`. BytePlus does not write pricing. 4. Inserts **new** ElevenLabs text-to-speech, music, sound-effect, and voice-design ids from [modelschemas](https://modelschemas.com/v1/schemas/elevenlabs) into `packages/ai-elevenlabs/src/model-meta.ts` (`scripts/sync-elevenlabs-models.ts`, also through `@modelschemas/client`). Text-to-speech ids are catalog rows with `providerMetadata.canDoTextToSpeech`. Music, sound-effect, and voice-design ids are the `model_id` enums of their request schemas. Transcription ids stay hand-maintained. -5. Writes a patch changeset for the packages that changed. +5. Rewrites each provider package's `./models` catalog (`src/models.ts`) from modelschemas, with `pnpm generate:models:catalogs`. The provider list is `CATALOGS` in `scripts/model-sync/model-catalog.ts`. A value modelschemas does not list stays `undefined`, and a value the script does not know stops the sync. Fix a wrong value upstream in modelschemas, not in the generated file. +6. Writes a patch changeset for the packages that changed. The sync stops with an error when modelschemas is down, when a catalog is empty, when no row has a `rawId`, `firstSeenAt`, or `deprecatedAt` key, or when an array or type map it must update is missing from a `model-meta.ts`. diff --git a/docs/advanced/model-catalog.md b/docs/advanced/model-catalog.md new file mode 100644 index 0000000000..735406f1a3 --- /dev/null +++ b/docs/advanced/model-catalog.md @@ -0,0 +1,115 @@ +--- +title: Model Catalog +id: model-catalog +description: "List a provider's models with their context windows, prices, and reasoning levels, and price each run with modelCost." +keywords: + - tanstack ai + - model catalog + - model prices + - context window + - reasoning levels + - modelCost +--- + +Import `models` from the `./models` subpath of a provider package. Each record gives the model id, the context window, the prices, and the reasoning levels. + +```typescript +import { models } from "@tanstack/ai-anthropic/models"; + +const model = models.find((m) => m.id === "claude-sonnet-5-5"); +console.log(model?.contextWindow, model?.prices?.input); +``` + +## Packages with a catalog + +| Provider | Import from | +| --- | --- | +| Anthropic | `@tanstack/ai-anthropic/models` | +| OpenAI | `@tanstack/ai-openai/models` | +| Azure OpenAI | `@tanstack/ai-openai/azure-models` | +| Gemini | `@tanstack/ai-gemini/models` | +| Vertex AI | `@tanstack/ai-vertex/models` | +| Amazon Bedrock | `@tanstack/ai-bedrock/models` | +| Groq | `@tanstack/ai-groq/models` | +| Mistral | `@tanstack/ai-mistral/models` | +| xAI | `@tanstack/ai-grok/models` | +| OpenRouter | `@tanstack/ai-openrouter/models` | +| Vercel AI Gateway | `@tanstack/ai-vercel-gateway/models` | +| Cloudflare Workers AI | `@tanstack/ai-cloudflare/models` | +| Cloudflare AI Gateway | `@tanstack/ai-cloudflare/gateway-models` | + +The data comes from [modelschemas](https://modelschemas.com). A daily job syncs it, and a patch release ships each change. + +## Fill a model picker + +The catalog is plain data, so you can import it in the browser. `supportedReasoningLevels` gives the levels that a model takes: + +```tsx +import { useState } from "react"; +import { supportedReasoningLevels } from "@tanstack/ai"; +import { models } from "@tanstack/ai-openai/models"; + +export function ModelPicker() { + const [id, setId] = useState("gpt-6.1-sol"); + const model = models.find((m) => m.id === id); + + return ( + <> + + + + ); +} +``` + +To pick a level that the model does not have, use `clampReasoningLevel`. It returns the nearest level that the model supports. See [Reasoning](../chat/reasoning). + +## Price a run + +`modelCost` gives the cost of one model call from its token usage. Call it in the [`onUsage`](./middleware-advanced#onusage) hook of a middleware: + +```typescript +import { chat, modelCost } from "@tanstack/ai"; +import type { ChatMiddleware } from "@tanstack/ai"; +import { anthropicText } from "@tanstack/ai-anthropic"; +import { models } from "@tanstack/ai-anthropic/models"; + +const costLog: ChatMiddleware = { + name: "cost-log", + onUsage: (ctx, usage) => { + const model = models.find((m) => m.id === ctx.model); + const cost = model ? modelCost(model, usage) : undefined; + console.log(cost ? `${cost.total} ${cost.currency}` : "Price not known"); + }, +}; + +const stream = chat({ + adapter: anthropicText("claude-sonnet-5-5"), + messages: [{ role: "user", content: "Hello!" }], + threadId: "thread-1", + middleware: [costLog], +}); +``` + +`modelCost` uses the long-context prices when the input is more than a tier's `inputTokensAbove`. It prices cache reads, cache writes, and 1-hour cache writes at their own rates. + +## Values that are not known + +The catalog does not guess. When the source does not list a value, the record does not have it: + +- `prices`, `contextWindow`, `maxOutputTokens`, `input`: `undefined`. +- One rate in `prices`, for example `cacheWrite`: `undefined`. That rate is not known, and it is not free. +- `modelCost`: `undefined` when the call used tokens that have no known price. +- `reasoning.levels`: empty when the source lists no levels. A model with `budget: true` takes `budgetTokens`. See [Reasoning](../chat/reasoning). + +Prices are in `prices.currency`, for example `USD` or `CNY`. diff --git a/docs/advanced/prompt-caching.md b/docs/advanced/prompt-caching.md index 13b8006751..2056bac4a8 100644 --- a/docs/advanced/prompt-caching.md +++ b/docs/advanced/prompt-caching.md @@ -76,6 +76,8 @@ const stream = chat({ From the second call of a conversation, most of the input comes from the cache. +To turn this usage into a price, use `modelCost`. See [Model Catalog](./model-catalog#price-a-run). + ## How it works - The cache key is the first of these that you set: diff --git a/docs/config.json b/docs/config.json index 2577af99fb..db130ba344 100644 --- a/docs/config.json +++ b/docs/config.json @@ -1650,7 +1650,12 @@ "label": "Prompt Caching", "to": "advanced/prompt-caching", "addedAt": "2026-10-09", - "updatedAt": "2026-10-22" + "updatedAt": "2026-10-23" + }, + { + "label": "Model Catalog", + "to": "advanced/model-catalog", + "addedAt": "2026-10-23" }, { "label": "Mid-Conversation Changes", diff --git a/package.json b/package.json index a5834d7c28..ebb08506b4 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,8 @@ "format": "oxfmt .", "generate-docs": "node scripts/generate-docs.ts && pnpm run copy:readme", "generate:fal-image-fields": "tsx scripts/generate-fal-image-field-map.ts", - "generate:models": "pnpm generate:models:fetch && pnpm regenerate:models && tsx scripts/sync-elevenlabs-models.ts && tsx scripts/sync-provider-models.ts && pnpm format", + "generate:models": "pnpm generate:models:fetch && pnpm regenerate:models && tsx scripts/sync-elevenlabs-models.ts && tsx scripts/sync-provider-models.ts && pnpm generate:models:catalogs && pnpm format", + "generate:models:catalogs": "node scripts/sync-model-catalogs.ts", "generate:models:elevenlabs": "tsx scripts/sync-elevenlabs-models.ts", "generate:models:fetch": "tsx scripts/fetch-openrouter-models.ts && tsx scripts/fetch-vercel-gateway-models.ts && tsx scripts/fetch-lovable-gateway-models.ts && node scripts/fetch-llmgateway-models.ts && tsx scripts/fetch-neon-models.ts", "regenerate:models": "tsx scripts/convert-openrouter-models.ts && tsx scripts/convert-vercel-gateway-models.ts && node scripts/convert-llmgateway-models.ts && tsx scripts/convert-neon-models.ts", @@ -72,7 +73,7 @@ "@changesets/changelog-github": "^0.7.0", "@changesets/cli": "^2.30.0", "@faker-js/faker": "^10.1.0", - "@modelschemas/client": "^0.1.0", + "@modelschemas/client": "^0.2.1", "@stylistic/eslint-plugin": "^5.10.0", "@tanstack/ai": "workspace:*", "@tanstack/ai-grok-build": "workspace:*", diff --git a/packages/ai-anthropic/package.json b/packages/ai-anthropic/package.json index 2da0ae69e9..3a482b0dcc 100644 --- a/packages/ai-anthropic/package.json +++ b/packages/ai-anthropic/package.json @@ -49,6 +49,10 @@ "./vertex": { "types": "./dist/esm/vertex/index.d.ts", "import": "./dist/esm/vertex/index.js" + }, + "./models": { + "types": "./dist/esm/models.d.ts", + "import": "./dist/esm/models.js" } }, "files": [ diff --git a/packages/ai-anthropic/src/models.ts b/packages/ai-anthropic/src/models.ts new file mode 100644 index 0000000000..8fb91b0c56 --- /dev/null +++ b/packages/ai-anthropic/src/models.ts @@ -0,0 +1,371 @@ +// Generated by scripts/sync-model-catalogs.ts from modelschemas. Do not edit. +import type { ModelRecord } from '@tanstack/ai' + +/** Every Anthropic chat model on modelschemas.com, sorted by id. */ +export const models: ReadonlyArray = [ + { + id: 'claude-fable-5', + name: 'Claude Fable 5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 1, + cacheWrite: 12.5, + cacheWrite1h: 20, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'claude-fable-5-1', + name: 'Claude Fable 5.1', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 0.25, + cacheWrite: 12.5, + cacheWrite1h: 20, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'claude-haiku-4-5', + name: 'Claude Haiku 4.5', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 1, + output: 5, + cacheRead: 0.1, + cacheWrite: 1.25, + cacheWrite1h: 2, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'claude-haiku-4-5-20251001', + name: 'Claude Haiku 4.5', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 1, + output: 5, + cacheRead: 0.1, + cacheWrite: 1.25, + cacheWrite1h: 2, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'claude-haiku-5-5', + name: 'Claude Haiku 5.5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.1, + output: 0.5, + cacheRead: 0.01, + cacheWrite: 0.125, + cacheWrite1h: 0.2, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'claude-opus-4-5', + name: 'Claude Opus 4.5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: true, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + cacheWrite1h: 10, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'claude-opus-4-5-20251101', + name: 'Claude Opus 4.5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: true, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + cacheWrite1h: 10, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'claude-opus-4-6', + name: 'Claude Opus 4.6', + input: ['text', 'image', 'document'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', max: 'max' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + cacheWrite1h: 10, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'claude-opus-4-7', + name: 'Claude Opus 4.7', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + cacheWrite1h: 10, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'claude-opus-4-8', + name: 'Claude Opus 4.8', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + cacheWrite1h: 10, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'claude-opus-5', + name: 'Claude Opus 5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + cacheWrite1h: 10, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'claude-opus-5-5', + name: 'Claude Opus 5.5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 4, + output: 20, + cacheRead: 0.2, + cacheWrite: 5, + cacheWrite1h: 8, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'claude-sonnet-4-5', + name: 'Claude Sonnet 4.5', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + cacheWrite1h: 6, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'claude-sonnet-4-5-20250929', + name: 'Claude Sonnet 4.5', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + cacheWrite1h: 6, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'claude-sonnet-4-6', + name: 'Claude Sonnet 4.6', + input: ['text', 'image', 'document'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', max: 'max' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + cacheWrite1h: 6, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'claude-sonnet-5', + name: 'Claude Sonnet 5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.2, + cacheWrite: 2.5, + cacheWrite1h: 4, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'claude-sonnet-5-5', + name: 'Claude Sonnet 5.5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.1, + cacheWrite: 2.5, + cacheWrite1h: 4, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, +] diff --git a/packages/ai-anthropic/vite.config.ts b/packages/ai-anthropic/vite.config.ts index 81aa27c404..1c18ce7ab3 100644 --- a/packages/ai-anthropic/vite.config.ts +++ b/packages/ai-anthropic/vite.config.ts @@ -32,6 +32,7 @@ export default mergeConfig( tanstackViteConfig({ entry: [ './src/index.ts', + './src/models.ts', './src/byok.ts', './src/tools/index.ts', './src/vertex/index.ts', diff --git a/packages/ai-bedrock/package.json b/packages/ai-bedrock/package.json index 8a3969898d..58aec8e56d 100644 --- a/packages/ai-bedrock/package.json +++ b/packages/ai-bedrock/package.json @@ -20,6 +20,10 @@ "./byok": { "types": "./dist/esm/byok.d.ts", "import": "./dist/esm/byok.js" + }, + "./models": { + "types": "./dist/esm/models.d.ts", + "import": "./dist/esm/models.js" } }, "files": [ diff --git a/packages/ai-bedrock/src/models.ts b/packages/ai-bedrock/src/models.ts new file mode 100644 index 0000000000..a2c7e852b1 --- /dev/null +++ b/packages/ai-bedrock/src/models.ts @@ -0,0 +1,2720 @@ +// Generated by scripts/sync-model-catalogs.ts from modelschemas. Do not edit. +import type { ModelRecord } from '@tanstack/ai' + +/** Every Amazon Bedrock chat model on modelschemas.com, sorted by id. */ +export const models: ReadonlyArray = [ + { + id: 'amazon.nova-2-5-sonic', + name: 'Nova 2.5 Sonic', + input: ['audio', 'text'], + reasoning: false, + contextWindow: 256000, + maxOutputTokens: 64000, + }, + { + id: 'amazon.nova-2-lite-v1:0', + name: 'Nova 2 Lite', + input: ['image', 'text', 'video'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.33, + output: 2.75, + cacheRead: 0.0825, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'amazon.nova-2-sonic-v1:0', + name: 'Nova 2 Sonic', + input: ['audio', 'text'], + reasoning: false, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'amazon.nova-lite-v1:0', + name: 'Nova Lite', + input: ['image', 'text', 'video'], + reasoning: false, + prices: { + currency: 'USD', + input: 0.06, + output: 0.24, + cacheRead: 0.015, + cacheWrite: 0, + }, + contextWindow: 300000, + maxOutputTokens: 10000, + }, + { + id: 'amazon.nova-micro-v1:0', + name: 'Nova Micro', + input: ['text'], + reasoning: false, + prices: { + currency: 'USD', + input: 0.035, + output: 0.14, + cacheRead: 0.00875, + cacheWrite: 0, + }, + contextWindow: 128000, + maxOutputTokens: 10000, + }, + { + id: 'amazon.nova-pro-v1:0', + name: 'Nova Pro', + input: ['image', 'text', 'video'], + reasoning: false, + prices: { + currency: 'USD', + input: 0.8, + output: 3.2, + cacheRead: 0.2, + cacheWrite: 0, + }, + contextWindow: 300000, + maxOutputTokens: 10000, + }, + { + id: 'anthropic.claude-3-haiku-20240307-v1:0', + name: 'Claude 3 Haiku', + input: ['image', 'text'], + reasoning: false, + prices: { currency: 'USD', input: 0.25, output: 1.25 }, + contextWindow: 200000, + maxOutputTokens: 4000, + }, + { + id: 'anthropic.claude-fable-5', + name: 'Claude Fable 5', + input: ['image', 'text'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 11, + output: 55, + cacheRead: 1.1, + cacheWrite: 13.75, + cacheWrite1h: 22, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic.claude-fable-5-1', + name: 'Claude Fable 5.1', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 11, + output: 55, + cacheRead: 0.275, + cacheWrite: 13.75, + cacheWrite1h: 22, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic.claude-haiku-4-5', + name: 'Claude Haiku 4.5', + input: ['image', 'text'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 1.1, + output: 5.5, + cacheRead: 0.11, + cacheWrite: 1.375, + cacheWrite1h: 2.2, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'anthropic.claude-haiku-5-5', + name: 'Claude Haiku 5.5', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.11, + output: 0.55, + cacheRead: 0.011, + cacheWrite: 0.1375, + cacheWrite1h: 0.22, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic.claude-mythos-5', + name: 'Claude Mythos 5', + input: ['image', 'text'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 11, + output: 55, + cacheRead: 1.1, + cacheWrite: 13.75, + cacheWrite1h: 22, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic.claude-mythos-5-1', + name: 'Claude Mythos 5.1', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 11, + output: 55, + cacheRead: 0.275, + cacheWrite: 13.75, + cacheWrite1h: 22, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic.claude-opus-4-5-20251101-v1:0', + name: 'Claude Opus 4.5', + input: ['image', 'text'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 5.5, + output: 27.5, + cacheRead: 0.55, + cacheWrite: 6.875, + cacheWrite1h: 11, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'anthropic.claude-opus-4-6-v1', + name: 'Claude Opus 4.6', + input: ['image', 'text'], + reasoning: { + levels: { max: 'max', high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5.5, + output: 27.5, + cacheRead: 0.55, + cacheWrite: 6.875, + cacheWrite1h: 11, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic.claude-opus-4-7', + name: 'Claude Opus 4.7', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5.5, + output: 27.5, + cacheRead: 0.55, + cacheWrite: 6.875, + cacheWrite1h: 11, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic.claude-opus-4-8', + name: 'Claude Opus 4.8', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5.5, + output: 27.5, + cacheRead: 0.55, + cacheWrite: 6.875, + cacheWrite1h: 11, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic.claude-opus-5', + name: 'Claude Opus 5', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5.5, + output: 27.5, + cacheRead: 0.55, + cacheWrite: 6.875, + cacheWrite1h: 11, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic.claude-opus-5-5', + name: 'Claude Opus 5.5', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 4.4, + output: 22, + cacheRead: 0.22, + cacheWrite: 5.5, + cacheWrite1h: 8.8, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic.claude-sonnet-4-20250514-v1:0', + name: 'Claude Sonnet 4', + input: ['image', 'text'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'anthropic.claude-sonnet-4-6', + name: 'Claude Sonnet 4.6', + input: ['image', 'text'], + reasoning: { + levels: { max: 'max', high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 3.3, + output: 16.5, + cacheRead: 0.33, + cacheWrite: 4.125, + cacheWrite1h: 6.6, + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'anthropic.claude-sonnet-5', + name: 'Claude Sonnet 5', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.2, + output: 11, + cacheRead: 0.22, + cacheWrite: 2.75, + cacheWrite1h: 4.4, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic.claude-sonnet-5-5', + name: 'Claude Sonnet 5.5', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.2, + output: 11, + cacheRead: 0.11, + cacheWrite: 2.75, + cacheWrite1h: 4.4, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'apac.amazon.nova-lite-v1:0', + name: 'Nova Lite', + input: ['image', 'text', 'video'], + reasoning: false, + contextWindow: 300000, + maxOutputTokens: 10000, + }, + { + id: 'apac.amazon.nova-pro-v1:0', + name: 'Nova Pro', + input: ['image', 'text', 'video'], + reasoning: false, + contextWindow: 300000, + maxOutputTokens: 10000, + }, + { + id: 'apac.anthropic.claude-sonnet-4-20250514-v1:0', + name: 'Claude Sonnet 4', + input: ['image', 'text'], + reasoning: { levels: {}, budget: true }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'au.anthropic.claude-haiku-4-5-20251001-v1:0', + name: 'Claude Haiku 4.5', + input: ['image', 'text'], + reasoning: { levels: {}, budget: true }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'au.anthropic.claude-haiku-5-5', + name: 'Claude Haiku 5.5', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'au.anthropic.claude-opus-4-6-v1', + name: 'Claude Opus 4.6', + input: ['image', 'text'], + reasoning: { + levels: { max: 'max', high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'au.anthropic.claude-opus-4-7', + name: 'Claude Opus 4.7', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'au.anthropic.claude-opus-4-8', + name: 'Claude Opus 4.8', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'au.anthropic.claude-opus-5', + name: 'Claude Opus 5', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'au.anthropic.claude-opus-5-5', + name: 'Claude Opus 5.5', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'au.anthropic.claude-sonnet-4-6', + name: 'Claude Sonnet 4.6', + input: ['image', 'text'], + reasoning: { + levels: { max: 'max', high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'au.anthropic.claude-sonnet-5', + name: 'Claude Sonnet 5', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'au.anthropic.claude-sonnet-5-5', + name: 'Claude Sonnet 5.5', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'ca.amazon.nova-lite-v1:0', + name: 'Nova Lite', + input: ['image', 'text', 'video'], + reasoning: false, + contextWindow: 300000, + maxOutputTokens: 10000, + }, + { + id: 'cohere.command-r-plus-v1:0', + name: 'Command R\\+', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 3, output: 15 }, + contextWindow: 128000, + maxOutputTokens: 4000, + }, + { + id: 'cohere.command-r-v1:0', + name: 'Command R', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.5, output: 1.5 }, + contextWindow: 128000, + maxOutputTokens: 4000, + }, + { + id: 'cohere.rerank-v3-5:0', + name: 'Rerank 3.5', + input: ['text'], + reasoning: false, + contextWindow: 4000, + }, + { + id: 'deepseek.v3.2', + name: 'DeepSeek V3.2', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.62, output: 1.85 }, + contextWindow: 164000, + maxOutputTokens: 8000, + }, + { + id: 'eu.amazon.nova-2-lite-v1:0', + name: 'Nova 2 Lite', + input: ['image', 'text', 'video'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'eu.amazon.nova-lite-v1:0', + name: 'Nova Lite', + input: ['image', 'text', 'video'], + reasoning: false, + contextWindow: 300000, + maxOutputTokens: 10000, + }, + { + id: 'eu.amazon.nova-micro-v1:0', + name: 'Nova Micro', + input: ['text'], + reasoning: false, + contextWindow: 128000, + maxOutputTokens: 10000, + }, + { + id: 'eu.amazon.nova-pro-v1:0', + name: 'Nova Pro', + input: ['image', 'text', 'video'], + reasoning: false, + contextWindow: 300000, + maxOutputTokens: 10000, + }, + { + id: 'eu.anthropic.claude-3-haiku-20240307-v1:0', + name: 'Claude 3 Haiku', + input: ['image', 'text'], + reasoning: false, + contextWindow: 200000, + maxOutputTokens: 4000, + }, + { + id: 'eu.anthropic.claude-haiku-4-5-20251001-v1:0', + name: 'Claude Haiku 4.5', + input: ['image', 'text'], + reasoning: { levels: {}, budget: true }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'eu.anthropic.claude-haiku-5-5', + name: 'Claude Haiku 5.5', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'eu.anthropic.claude-opus-4-5-20251101-v1:0', + name: 'Claude Opus 4.5', + input: ['image', 'text'], + reasoning: { levels: {}, budget: true }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'eu.anthropic.claude-opus-4-6-v1', + name: 'Claude Opus 4.6', + input: ['image', 'text'], + reasoning: { + levels: { max: 'max', high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'eu.anthropic.claude-opus-4-7', + name: 'Claude Opus 4.7', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'eu.anthropic.claude-opus-4-8', + name: 'Claude Opus 4.8', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'eu.anthropic.claude-opus-5', + name: 'Claude Opus 5', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'eu.anthropic.claude-opus-5-5', + name: 'Claude Opus 5.5', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'eu.anthropic.claude-sonnet-4-20250514-v1:0', + name: 'Claude Sonnet 4', + input: ['image', 'text'], + reasoning: { levels: {}, budget: true }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'eu.anthropic.claude-sonnet-4-6', + name: 'Claude Sonnet 4.6', + input: ['image', 'text'], + reasoning: { + levels: { max: 'max', high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'eu.anthropic.claude-sonnet-5', + name: 'Claude Sonnet 5', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'eu.anthropic.claude-sonnet-5-5', + name: 'Claude Sonnet 5.5', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'eu.meta.llama3-2-1b-instruct-v1:0', + name: 'Llama 3.2 1B Instruct', + input: ['text'], + reasoning: false, + contextWindow: 128000, + maxOutputTokens: 4000, + }, + { + id: 'eu.meta.llama3-2-3b-instruct-v1:0', + name: 'Llama 3.2 3B Instruct', + input: ['text'], + reasoning: false, + contextWindow: 128000, + maxOutputTokens: 4000, + }, + { + id: 'eu.mistral.pixtral-large-2502-v1:0', + name: 'Pixtral Large', + input: ['image', 'text'], + reasoning: false, + contextWindow: 128000, + maxOutputTokens: 16000, + }, + { + id: 'global.amazon.nova-2-lite-v1:0', + name: 'Nova 2 Lite', + input: ['image', 'text', 'video'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'global.anthropic.claude-fable-5', + name: 'Claude Fable 5', + input: ['image', 'text'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 1, + cacheWrite: 12.5, + cacheWrite1h: 20, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'global.anthropic.claude-fable-5-1', + name: 'Claude Fable 5.1', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 0.25, + cacheWrite: 12.5, + cacheWrite1h: 20, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'global.anthropic.claude-haiku-4-5-20251001-v1:0', + name: 'Claude Haiku 4.5', + input: ['image', 'text'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 1, + output: 5, + cacheRead: 0.1, + cacheWrite: 1.25, + cacheWrite1h: 2, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'global.anthropic.claude-haiku-5-5', + name: 'Claude Haiku 5.5', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.1, + output: 0.5, + cacheRead: 0.01, + cacheWrite: 0.125, + cacheWrite1h: 0.2, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'global.anthropic.claude-mythos-5-1', + name: 'Claude Mythos 5.1', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 0.25, + cacheWrite: 12.5, + cacheWrite1h: 20, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'global.anthropic.claude-opus-4-5-20251101-v1:0', + name: 'Claude Opus 4.5', + input: ['image', 'text'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + cacheWrite1h: 10, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'global.anthropic.claude-opus-4-6-v1', + name: 'Claude Opus 4.6', + input: ['image', 'text'], + reasoning: { + levels: { max: 'max', high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + cacheWrite1h: 10, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'global.anthropic.claude-opus-4-7', + name: 'Claude Opus 4.7', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + cacheWrite1h: 10, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'global.anthropic.claude-opus-4-8', + name: 'Claude Opus 4.8', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + cacheWrite1h: 10, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'global.anthropic.claude-opus-5', + name: 'Claude Opus 5', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + cacheWrite1h: 10, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'global.anthropic.claude-opus-5-5', + name: 'Claude Opus 5.5', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 4, + output: 20, + cacheRead: 0.2, + cacheWrite: 5, + cacheWrite1h: 8, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'global.anthropic.claude-sonnet-4-20250514-v1:0', + name: 'Claude Sonnet 4', + input: ['image', 'text'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'global.anthropic.claude-sonnet-4-6', + name: 'Claude Sonnet 4.6', + input: ['image', 'text'], + reasoning: { + levels: { max: 'max', high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + cacheWrite1h: 6, + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'global.anthropic.claude-sonnet-5', + name: 'Claude Sonnet 5', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.2, + cacheWrite: 2.5, + cacheWrite1h: 4, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'global.anthropic.claude-sonnet-5-5', + name: 'Claude Sonnet 5.5', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.1, + cacheWrite: 2.5, + cacheWrite1h: 4, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'global.moonshotai.kimi-k3', + name: 'Kimi K3', + input: ['image', 'text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 3, output: 15, cacheRead: 0.3 }, + contextWindow: 1000000, + }, + { + id: 'global.openai.gpt-5.4', + name: 'GPT-5.4', + input: ['image', 'text'], + reasoning: false, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'global.openai.gpt-5.5', + name: 'GPT-5.5', + input: ['image', 'text'], + reasoning: false, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'global.openai.gpt-5.6-luna', + name: 'GPT-5.6 Luna', + input: ['image', 'text'], + reasoning: false, + prices: { + currency: 'USD', + input: 0.2, + output: 1.2, + cacheRead: 0.02, + tiers: [ + { inputTokensAbove: 272000, input: 0.4, output: 1.8, cacheRead: 0.04 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'global.openai.gpt-5.6-sol', + name: 'GPT-5.6 Sol', + input: ['image', 'text'], + reasoning: false, + prices: { + currency: 'USD', + input: 4, + output: 20, + cacheRead: 0.4, + tiers: [ + { inputTokensAbove: 272000, input: 8, output: 30, cacheRead: 0.8 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'global.openai.gpt-5.6-terra', + name: 'GPT-5.6 Terra', + input: ['image', 'text'], + reasoning: false, + prices: { + currency: 'USD', + input: 2, + output: 12, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 272000, input: 4, output: 18, cacheRead: 0.4 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'global.openai.gpt-6-astra', + name: 'GPT-6 Astra', + input: ['image', 'text'], + reasoning: false, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 1, + tiers: [ + { inputTokensAbove: 272000, input: 20, output: 75, cacheRead: 2 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'global.openai.gpt-6-luna', + name: 'GPT-6 Luna', + input: ['image', 'text'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.1, + output: 0.5, + cacheRead: 0.01, + tiers: [ + { inputTokensAbove: 272000, input: 0.2, output: 0.75, cacheRead: 0.02 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'global.openai.gpt-6-sol', + name: 'GPT-6 Sol', + input: ['image', 'text'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 272000, input: 4, output: 15, cacheRead: 0.4 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'global.openai.gpt-6.1-sol', + name: 'GPT-6.1 Sol', + input: ['image', 'text'], + reasoning: false, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.1, + tiers: [ + { inputTokensAbove: 272000, input: 4, output: 15, cacheRead: 0.2 }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'global.twelvelabs.pegasus-1-5-v1:0', + name: 'Pegasus v1.5', + input: ['text', 'video'], + reasoning: false, + contextWindow: 261120, + maxOutputTokens: 98304, + }, + { + id: 'global.xai.grok-4.6', + name: 'Grok 4.6', + input: ['image', 'text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { currency: 'USD', input: 2, output: 6, cacheRead: 0.5 }, + contextWindow: 500000, + }, + { + id: 'global.xai.grok-4.7', + name: 'Grok 4.7', + input: ['image', 'text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { currency: 'USD', input: 2, output: 6, cacheRead: 0.5 }, + contextWindow: 524288, + maxOutputTokens: 524288000000, + }, + { + id: 'global.zai.glm-5.3', + name: 'GLM 5.3', + input: ['text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1.68, output: 5.28, cacheRead: 0.312 }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'google.gemma-4-26b-a4b', + name: 'Gemma 4 26B-A4B', + input: ['image', 'text', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.13, output: 0.4 }, + contextWindow: 256000, + }, + { + id: 'google.gemma-4-31b', + name: 'Gemma 4 31B', + input: ['image', 'text', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.14, output: 0.4 }, + contextWindow: 256000, + }, + { + id: 'google.gemma-4-e2b', + name: 'Gemma 4 E2B', + input: ['audio', 'image', 'text', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.04, output: 0.08 }, + contextWindow: 128000, + }, + { + id: 'in.anthropic.claude-haiku-4-5-20251001-v1:0', + name: 'Claude Haiku 4.5', + input: ['image', 'text'], + reasoning: { levels: {}, budget: true }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'in.anthropic.claude-opus-5', + name: 'Claude Opus 5', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'in.anthropic.claude-sonnet-5', + name: 'Claude Sonnet 5', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'in.moonshotai.kimi-k3', + name: 'Kimi K3', + input: ['image', 'text'], + reasoning: { levels: {}, budget: false }, + contextWindow: 1000000, + }, + { + id: 'in.openai.gpt-5.6-luna', + name: 'GPT-5.6 Luna', + input: ['image', 'text'], + reasoning: false, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'in.openai.gpt-5.6-terra', + name: 'GPT-5.6 Terra', + input: ['image', 'text'], + reasoning: false, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'jp.amazon.nova-2-lite-v1:0', + name: 'Nova 2 Lite', + input: ['image', 'text', 'video'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'jp.anthropic.claude-haiku-4-5-20251001-v1:0', + name: 'Claude Haiku 4.5', + input: ['image', 'text'], + reasoning: { levels: {}, budget: true }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'jp.anthropic.claude-haiku-5-5', + name: 'Claude Haiku 5.5', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'jp.anthropic.claude-opus-4-7', + name: 'Claude Opus 4.7', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'jp.anthropic.claude-opus-4-8', + name: 'Claude Opus 4.8', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'jp.anthropic.claude-opus-5-5', + name: 'Claude Opus 5.5', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'jp.anthropic.claude-sonnet-4-6', + name: 'Claude Sonnet 4.6', + input: ['image', 'text'], + reasoning: { + levels: { max: 'max', high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'meta.llama3-1-405b-instruct-v1:0', + name: 'Llama 3.1 405B Instruct', + input: ['text'], + reasoning: false, + contextWindow: 128000, + maxOutputTokens: 4000, + }, + { + id: 'meta.llama3-2-11b-instruct-v1:0', + name: 'Llama 3.2 11B Instruct', + input: ['image', 'text'], + reasoning: false, + prices: { currency: 'USD', input: 0.16, output: 0.16 }, + contextWindow: 128000, + maxOutputTokens: 4000, + }, + { + id: 'meta.llama3-2-1b-instruct-v1:0', + name: 'Llama 3.2 1B Instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.1 }, + contextWindow: 128000, + maxOutputTokens: 4000, + }, + { + id: 'meta.llama3-2-3b-instruct-v1:0', + name: 'Llama 3.2 3B Instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.15 }, + contextWindow: 128000, + maxOutputTokens: 4000, + }, + { + id: 'meta.llama3-2-90b-instruct-v1:0', + name: 'Llama 3.2 90B Instruct', + input: ['image', 'text'], + reasoning: false, + prices: { currency: 'USD', input: 0.72, output: 0.72 }, + contextWindow: 128000, + maxOutputTokens: 4000, + }, + { + id: 'minimax.minimax-m2.5', + name: 'MiniMax M2.5', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.3, output: 1.2 }, + contextWindow: 196000, + maxOutputTokens: 8000, + }, + { + id: 'mistral.magistral-small-2509', + name: 'Magistral Small 2509', + input: ['image', 'text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.5, output: 1.5 }, + contextWindow: 128000, + maxOutputTokens: 40000, + }, + { + id: 'mistral.ministral-3-14b-instruct', + name: 'Ministral 14B 3.0', + input: ['image', 'text'], + reasoning: false, + prices: { currency: 'USD', input: 0.2, output: 0.2 }, + contextWindow: 128000, + maxOutputTokens: 8000, + }, + { + id: 'mistral.ministral-3-3b-instruct', + name: 'Ministral 3B', + input: ['image', 'text'], + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.1 }, + contextWindow: 128000, + maxOutputTokens: 8000, + }, + { + id: 'mistral.ministral-3-8b-instruct', + name: 'Ministral 3 8B', + input: ['image', 'text'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.15 }, + contextWindow: 128000, + maxOutputTokens: 8000, + }, + { + id: 'mistral.mistral-large-2402-v1:0', + name: 'Mistral Large', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 4, output: 12 }, + contextWindow: 32000, + maxOutputTokens: 4000, + }, + { + id: 'mistral.mistral-large-3-675b-instruct', + name: 'Mistral Large 3', + input: ['image', 'text'], + reasoning: false, + prices: { currency: 'USD', input: 0.5, output: 1.5 }, + contextWindow: 256000, + maxOutputTokens: 32000, + }, + { + id: 'mistral.mistral-small-2402-v1:0', + name: 'Mistral Small', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 1, output: 3 }, + contextWindow: 32000, + maxOutputTokens: 4000, + }, + { + id: 'mistral.pixtral-large-2502-v1:0', + name: 'Pixtral Large', + input: ['image', 'text'], + reasoning: false, + prices: { currency: 'USD', input: 2, output: 6 }, + contextWindow: 128000, + maxOutputTokens: 16000, + }, + { + id: 'moonshotai.kimi-k2.5', + name: 'Kimi K2.5', + input: ['image', 'text'], + reasoning: false, + prices: { currency: 'USD', input: 0.6, output: 3 }, + contextWindow: 256000, + maxOutputTokens: 16000, + }, + { + id: 'moonshotai.kimi-k3', + name: 'Kimi K3', + input: ['image', 'text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 3.3, output: 16.5, cacheRead: 0.33 }, + contextWindow: 1000000, + }, + { + id: 'nvidia.nemotron-nano-3-30b', + name: 'Nemotron Nano 3 30B', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.06, output: 0.24 }, + contextWindow: 256000, + maxOutputTokens: 8000, + }, + { + id: 'nvidia.nemotron-super-3-120b', + name: 'NVIDIA Nemotron 3 Super 120B', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.15, output: 0.65 }, + contextWindow: 256000, + maxOutputTokens: 32000, + }, + { + id: 'openai.gpt-5.4', + name: 'GPT-5.4', + input: ['image', 'text'], + reasoning: false, + prices: { + currency: 'USD', + input: 2.75, + output: 16.5, + cacheRead: 0.275, + tiers: [ + { + inputTokensAbove: 272000, + input: 5.5, + output: 24.75, + cacheRead: 0.55, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai.gpt-5.5', + name: 'GPT-5.5', + input: ['image', 'text'], + reasoning: false, + prices: { + currency: 'USD', + input: 5.5, + output: 33, + cacheRead: 0.55, + tiers: [ + { inputTokensAbove: 272000, input: 11, output: 49.5, cacheRead: 1.1 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai.gpt-5.6-cyber', + name: 'Daybreak Red: GPT-5.6 Cyber', + input: ['image', 'text'], + reasoning: false, + prices: { currency: 'USD', input: 13.75, output: 82.5, cacheRead: 1.375 }, + contextWindow: 1050000, + }, + { + id: 'openai.gpt-5.6-luna', + name: 'GPT-5.6 Luna', + input: ['image', 'text'], + reasoning: false, + prices: { + currency: 'USD', + input: 0.22, + output: 1.32, + cacheRead: 0.022, + tiers: [ + { + inputTokensAbove: 272000, + input: 0.44, + output: 1.98, + cacheRead: 0.044, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai.gpt-5.6-sol', + name: 'GPT-5.6 Sol', + input: ['image', 'text'], + reasoning: false, + prices: { + currency: 'USD', + input: 4.4, + output: 22, + cacheRead: 0.44, + tiers: [ + { inputTokensAbove: 272000, input: 8.8, output: 33, cacheRead: 0.88 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai.gpt-5.6-terra', + name: 'GPT-5.6 Terra', + input: ['image', 'text'], + reasoning: false, + prices: { + currency: 'USD', + input: 2.2, + output: 13.2, + cacheRead: 0.22, + tiers: [ + { inputTokensAbove: 272000, input: 4.4, output: 19.8, cacheRead: 0.44 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai.gpt-6-astra', + name: 'GPT-6 Astra', + input: ['image', 'text'], + reasoning: false, + prices: { + currency: 'USD', + input: 11, + output: 55, + cacheRead: 1.1, + tiers: [ + { inputTokensAbove: 272000, input: 22, output: 82.5, cacheRead: 2.2 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai.gpt-6-luna', + name: 'GPT-6 Luna', + input: ['image', 'text'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.11, + output: 0.55, + cacheRead: 0.011, + tiers: [ + { + inputTokensAbove: 272000, + input: 0.22, + output: 0.825, + cacheRead: 0.022, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai.gpt-6-sol', + name: 'GPT-6 Sol', + input: ['image', 'text'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.2, + output: 11, + cacheRead: 0.22, + tiers: [ + { inputTokensAbove: 272000, input: 4.4, output: 16.5, cacheRead: 0.44 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai.gpt-6.1-sol', + name: 'GPT-6.1 Sol', + input: ['image', 'text'], + reasoning: false, + prices: { + currency: 'USD', + input: 2.2, + output: 11, + cacheRead: 0.11, + tiers: [ + { inputTokensAbove: 272000, input: 4.4, output: 16.5, cacheRead: 0.22 }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'openai.gpt-daybreak-blue-5.6-sol', + name: 'Daybreak Blue: GPT-5.6 Sol', + input: ['image', 'text'], + reasoning: false, + prices: { + currency: 'USD', + input: 4.4, + output: 22, + cacheRead: 0.44, + tiers: [ + { inputTokensAbove: 272000, input: 8.8, output: 33, cacheRead: 0.88 }, + ], + }, + contextWindow: 1050000, + }, + { + id: 'openai.gpt-oss-120b', + name: 'gpt-oss-120b', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.15, output: 0.6 }, + contextWindow: 128000, + maxOutputTokens: 16000, + }, + { + id: 'openai.gpt-oss-120b-1:0', + name: 'gpt-oss-120b', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.15, output: 0.6 }, + contextWindow: 128000, + maxOutputTokens: 16000, + }, + { + id: 'openai.gpt-oss-20b', + name: 'gpt-oss-20b', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.07, output: 0.3 }, + contextWindow: 128000, + maxOutputTokens: 16000, + }, + { + id: 'openai.gpt-oss-20b-1:0', + name: 'gpt-oss-20b', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.07, output: 0.3 }, + contextWindow: 128000, + maxOutputTokens: 16000, + }, + { + id: 'openai.gpt-oss-safeguard-120b', + name: 'GPT OSS Safeguard 120B', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.15, output: 0.6 }, + contextWindow: 128000, + maxOutputTokens: 16000, + }, + { + id: 'openai.gpt-oss-safeguard-20b', + name: 'GPT OSS Safeguard 20B', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.07, output: 0.2 }, + contextWindow: 128000, + maxOutputTokens: 16000, + }, + { + id: 'qwen.qwen3-235b-a22b-2507', + name: 'Qwen3 235B A22B 2507', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.22, output: 0.88 }, + contextWindow: 256000, + maxOutputTokens: 8000, + }, + { + id: 'qwen.qwen3-235b-a22b-2507-v1:0', + name: 'Qwen3 235B A22B 2507', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.22, output: 0.88 }, + contextWindow: 256000, + maxOutputTokens: 8000, + }, + { + id: 'qwen.qwen3-32b', + name: 'Qwen3 32B', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.15, output: 0.6 }, + contextWindow: 32000, + maxOutputTokens: 8000, + }, + { + id: 'qwen.qwen3-32b-v1:0', + name: 'Qwen3 32B', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.15, output: 0.6 }, + contextWindow: 32000, + maxOutputTokens: 8000, + }, + { + id: 'qwen.qwen3-coder-next', + name: 'Qwen3 Coder Next', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.5, output: 1.2 }, + contextWindow: 256000, + maxOutputTokens: 16000, + }, + { + id: 'qwen.qwen3-next-80b-a3b', + name: 'Qwen3 Next 80B A3B', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.14, output: 1.2 }, + contextWindow: 256000, + maxOutputTokens: 8000, + }, + { + id: 'qwen.qwen3-next-80b-a3b-instruct', + name: 'Qwen3 Next 80B A3B', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.14, output: 1.2 }, + contextWindow: 256000, + maxOutputTokens: 8000, + }, + { + id: 'qwen.qwen3-vl-235b-a22b', + name: 'Qwen3 VL 235B A22B', + input: ['image', 'text'], + reasoning: false, + prices: { currency: 'USD', input: 0.53, output: 2.66 }, + contextWindow: 256000, + maxOutputTokens: 8000, + }, + { + id: 'qwen.qwen3-vl-235b-a22b-instruct', + name: 'Qwen3 VL 235B A22B', + input: ['image', 'text'], + reasoning: false, + prices: { currency: 'USD', input: 0.53, output: 2.66 }, + contextWindow: 256000, + maxOutputTokens: 8000, + }, + { + id: 'twelvelabs.pegasus-1-5-v1:0', + name: 'Pegasus v1.5', + input: ['text', 'video'], + reasoning: false, + contextWindow: 261120, + maxOutputTokens: 98304, + }, + { + id: 'us-gov.anthropic.claude-opus-4-8', + name: 'Claude Opus 4.8', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'us-gov.nvidia.nemotron-nano-3-30b', + name: 'Nemotron Nano 3 30B', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 256000, + maxOutputTokens: 8000, + }, + { + id: 'us-gov.nvidia.nemotron-super-3-120b', + name: 'NVIDIA Nemotron 3 Super 120B', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 256000, + maxOutputTokens: 32000, + }, + { + id: 'us-gov.openai.gpt-oss-120b-1:0', + name: 'gpt-oss-120b', + input: ['text'], + reasoning: { levels: {}, budget: false }, + contextWindow: 128000, + maxOutputTokens: 16000, + }, + { + id: 'us-gov.openai.gpt-oss-20b-1:0', + name: 'gpt-oss-20b', + input: ['text'], + reasoning: { levels: {}, budget: false }, + contextWindow: 128000, + maxOutputTokens: 16000, + }, + { + id: 'us.amazon.nova-2-lite-v1:0', + name: 'Nova 2 Lite', + input: ['image', 'text', 'video'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'us.amazon.nova-lite-v1:0', + name: 'Nova Lite', + input: ['image', 'text', 'video'], + reasoning: false, + contextWindow: 300000, + maxOutputTokens: 10000, + }, + { + id: 'us.amazon.nova-micro-v1:0', + name: 'Nova Micro', + input: ['text'], + reasoning: false, + contextWindow: 128000, + maxOutputTokens: 10000, + }, + { + id: 'us.amazon.nova-pro-v1:0', + name: 'Nova Pro', + input: ['image', 'text', 'video'], + reasoning: false, + contextWindow: 300000, + maxOutputTokens: 10000, + }, + { + id: 'us.anthropic.claude-3-haiku-20240307-v1:0', + name: 'Claude 3 Haiku', + input: ['image', 'text'], + reasoning: false, + contextWindow: 200000, + maxOutputTokens: 4000, + }, + { + id: 'us.anthropic.claude-fable-5', + name: 'Claude Fable 5', + input: ['image', 'text'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'us.anthropic.claude-fable-5-1', + name: 'Claude Fable 5.1', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'us.anthropic.claude-haiku-4-5-20251001-v1:0', + name: 'Claude Haiku 4.5', + input: ['image', 'text'], + reasoning: { levels: {}, budget: true }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'us.anthropic.claude-haiku-5-5', + name: 'Claude Haiku 5.5', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'us.anthropic.claude-mythos-5-1', + name: 'Claude Mythos 5.1', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'us.anthropic.claude-opus-4-5-20251101-v1:0', + name: 'Claude Opus 4.5', + input: ['image', 'text'], + reasoning: { levels: {}, budget: true }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'us.anthropic.claude-opus-4-6-v1', + name: 'Claude Opus 4.6', + input: ['image', 'text'], + reasoning: { + levels: { max: 'max', high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'us.anthropic.claude-opus-4-7', + name: 'Claude Opus 4.7', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'us.anthropic.claude-opus-4-8', + name: 'Claude Opus 4.8', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'us.anthropic.claude-opus-5', + name: 'Claude Opus 5', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'us.anthropic.claude-opus-5-5', + name: 'Claude Opus 5.5', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'us.anthropic.claude-sonnet-4-20250514-v1:0', + name: 'Claude Sonnet 4', + input: ['image', 'text'], + reasoning: { levels: {}, budget: true }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'us.anthropic.claude-sonnet-4-6', + name: 'Claude Sonnet 4.6', + input: ['image', 'text'], + reasoning: { + levels: { max: 'max', high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'us.anthropic.claude-sonnet-5', + name: 'Claude Sonnet 5', + input: ['image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'us.anthropic.claude-sonnet-5-5', + name: 'Claude Sonnet 5.5', + input: ['image', 'text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'us.meta.llama3-1-405b-instruct-v1:0', + name: 'Llama 3.1 405B Instruct', + input: ['text'], + reasoning: false, + contextWindow: 128000, + maxOutputTokens: 4000, + }, + { + id: 'us.meta.llama3-2-11b-instruct-v1:0', + name: 'Llama 3.2 11B Instruct', + input: ['image', 'text'], + reasoning: false, + contextWindow: 128000, + maxOutputTokens: 4000, + }, + { + id: 'us.meta.llama3-2-1b-instruct-v1:0', + name: 'Llama 3.2 1B Instruct', + input: ['text'], + reasoning: false, + contextWindow: 128000, + maxOutputTokens: 4000, + }, + { + id: 'us.meta.llama3-2-3b-instruct-v1:0', + name: 'Llama 3.2 3B Instruct', + input: ['text'], + reasoning: false, + contextWindow: 128000, + maxOutputTokens: 4000, + }, + { + id: 'us.meta.llama3-2-90b-instruct-v1:0', + name: 'Llama 3.2 90B Instruct', + input: ['image', 'text'], + reasoning: false, + contextWindow: 128000, + maxOutputTokens: 4000, + }, + { + id: 'us.mistral.pixtral-large-2502-v1:0', + name: 'Pixtral Large', + input: ['image', 'text'], + reasoning: false, + contextWindow: 128000, + maxOutputTokens: 16000, + }, + { + id: 'us.moonshotai.kimi-k3', + name: 'Kimi K3', + input: ['image', 'text'], + reasoning: { levels: {}, budget: false }, + contextWindow: 1000000, + }, + { + id: 'us.openai.gpt-5.4', + name: 'GPT-5.4', + input: ['image', 'text'], + reasoning: false, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'us.openai.gpt-5.5', + name: 'GPT-5.5', + input: ['image', 'text'], + reasoning: false, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'us.openai.gpt-5.6-luna', + name: 'GPT-5.6 Luna', + input: ['image', 'text'], + reasoning: false, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'us.openai.gpt-5.6-sol', + name: 'GPT-5.6 Sol', + input: ['image', 'text'], + reasoning: false, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'us.openai.gpt-5.6-terra', + name: 'GPT-5.6 Terra', + input: ['image', 'text'], + reasoning: false, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'us.openai.gpt-6-astra', + name: 'GPT-6 Astra', + input: ['image', 'text'], + reasoning: false, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'us.openai.gpt-6-luna', + name: 'GPT-6 Luna', + input: ['image', 'text'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'us.openai.gpt-6-sol', + name: 'GPT-6 Sol', + input: ['image', 'text'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'us.openai.gpt-6.1-sol', + name: 'GPT-6.1 Sol', + input: ['image', 'text'], + reasoning: false, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'us.twelvelabs.pegasus-1-5-v1:0', + name: 'Pegasus v1.5', + input: ['text', 'video'], + reasoning: false, + contextWindow: 261120, + maxOutputTokens: 98304, + }, + { + id: 'us.xai.grok-4.6', + name: 'Grok 4.6', + input: ['image', 'text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + contextWindow: 500000, + }, + { + id: 'us.xai.grok-4.7', + name: 'Grok 4.7', + input: ['image', 'text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + contextWindow: 524288, + maxOutputTokens: 524288000000, + }, + { + id: 'us.zai.glm-5.3', + name: 'GLM 5.3', + input: ['text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'writer.palmyra-vision-7b', + name: 'Palmyra Vision 7B', + input: ['image', 'text'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.6 }, + contextWindow: 4000, + maxOutputTokens: 4000, + }, + { + id: 'xai.grok-4.3', + name: 'Grok 4.3', + input: ['image', 'text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 2.5, cacheRead: 0.2 }, + contextWindow: 1000000, + }, + { + id: 'xai.grok-4.6', + name: 'Grok 4.6', + input: ['image', 'text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { currency: 'USD', input: 2.2, output: 6.6, cacheRead: 0.55 }, + contextWindow: 500000, + }, + { + id: 'xai.grok-4.7', + name: 'Grok 4.7', + input: ['image', 'text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { currency: 'USD', input: 2.2, output: 6.6, cacheRead: 0.55 }, + contextWindow: 524288, + maxOutputTokens: 524288000000, + }, + { + id: 'zai.glm-5', + name: 'GLM 5', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 1, output: 3.2 }, + contextWindow: 200000, + maxOutputTokens: 128000, + }, + { + id: 'zai.glm-5.3', + name: 'GLM 5.3', + input: ['text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1.848, output: 5.808, cacheRead: 0.3432 }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, +] diff --git a/packages/ai-bedrock/vite.config.ts b/packages/ai-bedrock/vite.config.ts index 982be0e207..ef33831a24 100644 --- a/packages/ai-bedrock/vite.config.ts +++ b/packages/ai-bedrock/vite.config.ts @@ -29,7 +29,7 @@ const config = defineConfig({ export default mergeConfig( config, tanstackViteConfig({ - entry: ['./src/index.ts', './src/byok.ts'], + entry: ['./src/index.ts', './src/models.ts', './src/byok.ts'], srcDir: './src', cjs: false, }), diff --git a/packages/ai-cloudflare/package.json b/packages/ai-cloudflare/package.json index c197987cfe..7786e57413 100644 --- a/packages/ai-cloudflare/package.json +++ b/packages/ai-cloudflare/package.json @@ -28,6 +28,14 @@ "./byok": { "types": "./dist/esm/byok.d.ts", "import": "./dist/esm/byok.js" + }, + "./models": { + "types": "./dist/esm/models.d.ts", + "import": "./dist/esm/models.js" + }, + "./gateway-models": { + "types": "./dist/esm/gateway-models.d.ts", + "import": "./dist/esm/gateway-models.js" } }, "files": [ diff --git a/packages/ai-cloudflare/src/gateway-models.ts b/packages/ai-cloudflare/src/gateway-models.ts new file mode 100644 index 0000000000..c5b746a9c1 --- /dev/null +++ b/packages/ai-cloudflare/src/gateway-models.ts @@ -0,0 +1,771 @@ +// Generated by scripts/sync-model-catalogs.ts from modelschemas. Do not edit. +import type { ModelRecord } from '@tanstack/ai' + +/** Every Cloudflare AI Gateway chat model on modelschemas.com, sorted by id. */ +export const models: ReadonlyArray = [ + { + id: 'alibaba/qwen3-max', + name: 'Qwen 3 Max', + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.2, output: 6 }, + }, + { + id: 'alibaba/qwen3.5-397b-a17b', + name: 'Qwen 3.5 397B A17B', + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.6, output: 3.6 }, + }, + { + id: 'alibaba/qwen3.7-max', + name: 'Qwen 3.7 Max', + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.25, output: 3.75, cacheRead: 0.25 }, + }, + { + id: 'alibaba/qwen3.7-plus', + name: 'Qwen 3.7 Plus', + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.32, output: 1.28, cacheRead: 0.064 }, + }, + { + id: 'alibaba/qwen3.8-max', + name: 'Qwen 3.8 Max', + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 2, output: 6, cacheRead: 0.25 }, + }, + { + id: 'anthropic/claude-fable-5', + name: 'Claude Fable 5', + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 1, + cacheWrite: 12.5, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-fable-5.1', + name: 'Claude Fable 5.1', + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 0.25, + cacheWrite: 12.5, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-haiku-4.5', + name: 'Claude Haiku 4.5', + reasoning: false, + prices: { + currency: 'USD', + input: 1, + output: 5, + cacheRead: 0.1, + cacheWrite: 1.25, + }, + contextWindow: 200000, + maxOutputTokens: 8192, + }, + { + id: 'anthropic/claude-haiku-5.5', + name: 'Claude Haiku 5.5', + reasoning: { levels: {}, budget: false }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-4.5', + name: 'Claude Opus 4.5', + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + }, + contextWindow: 200000, + maxOutputTokens: 32000, + }, + { + id: 'anthropic/claude-opus-4.6', + name: 'Claude Opus 4.6', + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-4.7', + name: 'Claude Opus 4.7', + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-4.8', + name: 'Claude Opus 4.8', + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-5', + name: 'Claude Opus 5', + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-5.5', + name: 'Claude Opus 5.5', + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 4, + output: 20, + cacheRead: 0.2, + cacheWrite: 5, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-sonnet-4.5', + name: 'Claude Sonnet 4.5', + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + }, + contextWindow: 200000, + maxOutputTokens: 8192, + }, + { + id: 'anthropic/claude-sonnet-4.6', + name: 'Claude Sonnet 4.6', + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + }, + contextWindow: 200000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-sonnet-5', + name: 'Claude Sonnet 5', + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.2, + cacheWrite: 2.5, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-sonnet-5.5', + name: 'Claude Sonnet 5.5', + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.2, + cacheWrite: 2.5, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'deepseek/deepseek-v4-pro', + name: 'DeepSeek V4 Pro', + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.74, output: 3.48, cacheRead: 0.145 }, + contextWindow: 131072, + }, + { + id: 'fireworks/ember-1', + name: 'Ember-1', + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 3, output: 15, cacheRead: 0.3 }, + contextWindow: 1040000, + }, + { + id: 'google/gemini-2.5-flash', + name: 'Gemini 2.5 Flash', + reasoning: false, + prices: { currency: 'USD', input: 0.3, output: 2.5, cacheRead: 0.03 }, + contextWindow: 1000000, + maxOutputTokens: 8192, + }, + { + id: 'google/gemini-2.5-flash-lite', + name: 'Gemini 2.5 Flash Lite', + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.4, cacheRead: 0.01 }, + contextWindow: 1000000, + maxOutputTokens: 8192, + }, + { + id: 'google/gemini-2.5-pro', + name: 'Gemini 2.5 Pro', + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 1000000, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3-flash', + name: 'Gemini 3 Flash', + reasoning: { levels: {}, budget: false }, + contextWindow: 1000000, + maxOutputTokens: 8192, + }, + { + id: 'google/gemini-3.1-flash-lite', + name: 'Gemini 3.1 Flash Lite', + reasoning: false, + contextWindow: 1000000, + maxOutputTokens: 8192, + }, + { + id: 'google/gemini-3.1-pro', + name: 'Gemini 3.1 Pro', + reasoning: { levels: {}, budget: false }, + contextWindow: 1000000, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.5-flash', + name: 'Gemini 3.5 Flash', + reasoning: { levels: {}, budget: false }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.5-flash-lite', + name: 'Gemini 3.5 Flash-Lite', + reasoning: false, + prices: { + currency: 'USD', + input: 0.3, + output: 2.5, + cacheRead: 0.03, + cacheWrite: 0.03, + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.6-flash', + name: 'Gemini 3.6 Flash', + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 1.5, + output: 7.5, + cacheRead: 0.15, + cacheWrite: 1.5, + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.7-flash', + name: 'Gemini 3.7 Flash', + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.75, output: 3.75, cacheRead: 0.075 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.8-flash', + name: 'Gemini 3.8 Flash', + reasoning: { levels: {}, budget: false }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-4-argon', + name: 'Gemini 4 Argon', + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 2, output: 10, cacheRead: 0.1 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'meta/muse-spark-1.1', + name: 'Muse Spark 1.1', + input: ['text', 'image', 'video', 'audio', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.25, output: 4.25, cacheRead: 0.16 }, + }, + { + id: 'meta/muse-spark-1.2', + name: 'Muse Spark 1.2', + input: ['text', 'image', 'video', 'audio', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.25, output: 4.25, cacheRead: 0.16 }, + }, + { + id: 'meta/muse-spark-1.3', + name: 'Muse Spark 1.3', + input: ['text', 'image', 'video', 'audio', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.25, output: 4.25, cacheRead: 0.16 }, + }, + { + id: 'meta/muse-spark-open', + name: 'Muse Spark Open', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 4.25, cacheRead: 0.15 }, + contextWindow: 1040000, + }, + { + id: 'meta/muse-wonder-1.0', + name: 'Muse Wonder 1.0', + input: ['text', 'image', 'video', 'audio', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 4, output: 20, cacheRead: 0.2 }, + }, + { + id: 'minimax/m2.7', + name: 'MiniMax M2.7', + reasoning: false, + prices: { + currency: 'USD', + input: 0.3, + output: 1.2, + cacheRead: 0.06, + cacheWrite: 0.375, + }, + contextWindow: 128000, + maxOutputTokens: 4096, + }, + { + id: 'minimax/m3', + name: 'MiniMax M3', + reasoning: false, + contextWindow: 1000000, + maxOutputTokens: 4096, + }, + { + id: 'moonshotai/kimi-k3', + name: 'Kimi K3', + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 3, output: 15, cacheRead: 0.3 }, + contextWindow: 1048576, + maxOutputTokens: 1048576, + }, + { + id: 'openai/gpt-4.1', + name: 'GPT-4.1', + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 2, output: 8, cacheRead: 0.5 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'openai/gpt-4.1-mini', + name: 'GPT-4.1 mini', + reasoning: false, + prices: { currency: 'USD', input: 0.4, output: 1.6, cacheRead: 0.1 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'openai/gpt-4.1-nano', + name: 'GPT-4.1 nano', + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.4, cacheRead: 0.025 }, + contextWindow: 1000000, + maxOutputTokens: 32768, + }, + { + id: 'openai/gpt-4o', + name: 'GPT-4o', + reasoning: false, + prices: { currency: 'USD', input: 1.25, output: 5, cacheRead: 0.625 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-4o-mini', + name: 'GPT-4o mini', + reasoning: false, + prices: { currency: 'USD', input: 0.075, output: 0.3, cacheRead: 0.0375 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-5', + name: 'GPT-5', + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-5-mini', + name: 'GPT-5 mini', + reasoning: false, + prices: { currency: 'USD', input: 0.25, output: 2, cacheRead: 0.025 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-5-nano', + name: 'GPT-5 nano', + reasoning: false, + prices: { currency: 'USD', input: 0.05, output: 0.4, cacheRead: 0.005 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-5.1', + name: 'GPT-5.1', + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-5.4', + name: 'GPT-5.4', + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 2.5, output: 15, cacheRead: 0.25 }, + contextWindow: 1000000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-5.4-mini', + name: 'GPT-5.4 mini', + reasoning: false, + prices: { currency: 'USD', input: 0.75, output: 4.5, cacheRead: 0.075 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-5.4-nano', + name: 'GPT-5.4 nano', + reasoning: false, + prices: { currency: 'USD', input: 0.2, output: 1.25, cacheRead: 0.02 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-5.4-pro', + name: 'GPT-5.4 pro', + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 30, output: 180 }, + contextWindow: 1000000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-5.5', + name: 'GPT-5.5', + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 5, output: 30 }, + contextWindow: 1000000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-5.5-pro', + name: 'GPT-5.5 pro', + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 30, output: 180 }, + contextWindow: 1000000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-5.6-luna', + name: 'GPT-5.6 Luna', + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.2, + output: 1.2, + cacheRead: 0.02, + cacheWrite: 0.25, + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-sol', + name: 'GPT-5.6 Sol', + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.25, + cacheWrite: 3.125, + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-terra', + name: 'GPT-5.6 Terra', + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 12, + cacheRead: 0.2, + cacheWrite: 2.5, + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-astra', + name: 'GPT-6 Astra', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-luna', + name: 'GPT-6 Luna', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-sol', + name: 'GPT-6 Sol', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6.1-sol', + name: 'GPT-6.1 Sol', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/o3', + name: 'o3', + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 2, output: 8, cacheRead: 0.5 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'openai/o3-mini', + name: 'o3-mini', + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.1, output: 4.4, cacheRead: 0.55 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'openai/o4-mini', + name: 'o4-mini', + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.1, output: 4.4, cacheRead: 0.275 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'reflection-ai/beam-1.0-501b-a23b', + name: 'Beam 1.0 501B A23B', + reasoning: { levels: {}, budget: false }, + contextWindow: 262144, + maxOutputTokens: 131072, + }, + { + id: 'thinkingmachines/inkling', + name: 'Inkling', + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 1.87, + output: 4.68, + cacheRead: 0.374, + cacheWrite: 1.87, + }, + contextWindow: 64000, + }, + { + id: 'thinkingmachines/inkling-256k', + name: 'Inkling 256K', + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 3.74, + output: 9.36, + cacheRead: 0.748, + cacheWrite: 3.74, + }, + contextWindow: 262144, + }, + { + id: 'typesafe/jev', + name: 'Jev', + reasoning: false, + prices: { currency: 'USD', input: 0.042, output: 0, cacheRead: 0 }, + contextWindow: 32000, + }, + { + id: 'typesafe/jev-1.14.0', + name: 'Jev 1.14', + reasoning: false, + prices: { currency: 'USD', input: 0.042, output: 0, cacheRead: 0 }, + contextWindow: 32000, + }, + { + id: 'unbiased/pareto', + name: 'Pareto', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 2.5, output: 7.5, cacheRead: 0.25 }, + }, + { + id: 'xai/grok-4.20-0309-non-reasoning', + name: 'Grok 4.20 Non-Reasoning', + reasoning: false, + prices: { currency: 'USD', input: 2, output: 6, cacheRead: 0.2 }, + contextWindow: 2000000, + }, + { + id: 'xai/grok-4.20-0309-reasoning', + name: 'Grok 4.20 Reasoning', + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 2, output: 6, cacheRead: 0.2 }, + contextWindow: 2000000, + }, + { + id: 'xai/grok-4.20-multi-agent-0309', + name: 'Grok 4.20 Multi-Agent', + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 2, output: 6, cacheRead: 0.2 }, + contextWindow: 2000000, + }, + { + id: 'xai/grok-4.3', + name: 'Grok 4.3', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 2.5, cacheRead: 0.2 }, + contextWindow: 1000000, + }, + { + id: 'xai/grok-4.5', + name: 'Grok 4.5', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 500000, + }, + { + id: 'xai/grok-4.6', + name: 'Grok 4.6', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 500000, + }, + { + id: 'xai/grok-4.7', + name: 'Grok 4.7', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + contextWindow: 500000, + }, +] diff --git a/packages/ai-cloudflare/src/models.ts b/packages/ai-cloudflare/src/models.ts new file mode 100644 index 0000000000..2fab5e54d8 --- /dev/null +++ b/packages/ai-cloudflare/src/models.ts @@ -0,0 +1,335 @@ +// Generated by scripts/sync-model-catalogs.ts from modelschemas. Do not edit. +import type { ModelRecord } from '@tanstack/ai' + +/** Every Cloudflare Workers AI chat model on modelschemas.com, sorted by id. */ +export const models: ReadonlyArray = [ + { + id: '@cf/aisingapore/gemma-sea-lion-v4-27b-it', + name: 'gemma-sea-lion-v4-27b-it', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.351, output: 0.555 }, + contextWindow: 128000, + }, + { + id: '@cf/cloudflare/clairic', + name: 'clairic', + input: ['text', 'image'], + reasoning: false, + contextWindow: 65536, + }, + { + id: '@cf/cloudflare/clef', + name: 'clef', + input: ['text', 'image'], + reasoning: false, + contextWindow: 65536, + }, + { + id: '@cf/cloudflare/clef-flash', + name: 'clef-flash', + input: ['text', 'image'], + reasoning: false, + contextWindow: 24576, + }, + { + id: '@cf/cloudflare/clef-omni', + name: 'clef-omni', + input: ['text', 'image'], + reasoning: false, + contextWindow: 64000, + }, + { + id: '@cf/daily-co/phonellm-mini-alpha-2', + name: 'phonellm-mini-alpha-2', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.06, output: 0.24 }, + contextWindow: 262140, + }, + { + id: '@cf/deepseek-ai/deepseek-r1-distill-qwen-32b', + name: 'deepseek-r1-distill-qwen-32b', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.497, output: 4.881 }, + contextWindow: 80000, + }, + { + id: '@cf/deepseek-ai/deepseek-v4-flash-0731', + name: 'deepseek-v4-flash-0731', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', high: 'high', max: 'max' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.44, output: 1.32, cacheRead: 0.014 }, + contextWindow: 1048576, + }, + { + id: '@cf/deepseek-ai/deepseek-v4-pro-0813', + name: 'deepseek-v4-pro-0813', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', high: 'high', max: 'max' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.32, output: 3.96, cacheRead: 0.044 }, + contextWindow: 1048576, + }, + { + id: '@cf/deepseek-ai/deepseek-v4.1-flash-1017', + name: 'deepseek-v4.1-flash-1017', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', high: 'high', max: 'max' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.3, output: 1.2, cacheRead: 0.006 }, + contextWindow: 1048576, + }, + { + id: '@cf/google/gemma-2b-it-lora', + name: 'gemma-2b-it-lora', + input: ['text'], + reasoning: false, + contextWindow: 8192, + }, + { + id: '@cf/google/gemma-4-26b-a4b-it', + name: 'gemma-4-26b-a4b-it', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.1, output: 0.3 }, + contextWindow: 256000, + }, + { + id: '@cf/google/gemma-7b-it-lora', + name: 'gemma-7b-it-lora', + input: ['text'], + reasoning: false, + contextWindow: 3500, + }, + { + id: '@cf/ibm-granite/granite-4.0-h-micro', + name: 'granite-4.0-h-micro', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.017, output: 0.112 }, + contextWindow: 131000, + }, + { + id: '@cf/meta-llama/llama-2-7b-chat-hf-lora', + name: 'llama-2-7b-chat-hf-lora', + input: ['text'], + reasoning: false, + contextWindow: 8192, + }, + { + id: '@cf/meta/llama-3.1-8b-instruct-fp8', + name: 'llama-3.1-8b-instruct-fp8', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.152, output: 0.287 }, + contextWindow: 32000, + }, + { + id: '@cf/meta/llama-3.2-11b-vision-instruct', + name: 'llama-3.2-11b-vision-instruct', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.0485, output: 0.676 }, + contextWindow: 128000, + }, + { + id: '@cf/meta/llama-3.2-1b-instruct', + name: 'llama-3.2-1b-instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.027, output: 0.201 }, + contextWindow: 60000, + }, + { + id: '@cf/meta/llama-3.2-3b-instruct', + name: 'llama-3.2-3b-instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.0509, output: 0.335 }, + contextWindow: 80000, + }, + { + id: '@cf/meta/llama-3.3-70b-instruct-fp8-fast', + name: 'llama-3.3-70b-instruct-fp8-fast', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.293, output: 2.253 }, + contextWindow: 24000, + }, + { + id: '@cf/meta/llama-4-scout-17b-16e-instruct', + name: 'llama-4-scout-17b-16e-instruct', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.27, output: 0.85 }, + contextWindow: 131000, + }, + { + id: '@cf/meta/llama-guard-3-8b', + name: 'llama-guard-3-8b', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.484, output: 0.03 }, + contextWindow: 131072, + }, + { + id: '@cf/mistral/mistral-7b-instruct-v0.2-lora', + name: 'mistral-7b-instruct-v0.2-lora', + input: ['text'], + reasoning: false, + contextWindow: 15000, + }, + { + id: '@cf/mistralai/mistral-small-3.1-24b-instruct', + name: 'mistral-small-3.1-24b-instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.351, output: 0.555 }, + contextWindow: 128000, + }, + { + id: '@cf/moonshotai/kimi-k2.6', + name: 'kimi-k2.6', + input: ['text', 'image'], + reasoning: { levels: { off: 'none', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 0.95, output: 4, cacheRead: 0.16 }, + contextWindow: 262144, + }, + { + id: '@cf/moonshotai/kimi-k2.7-code', + name: 'kimi-k2.7-code', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.95, output: 4, cacheRead: 0.19 }, + contextWindow: 262144, + }, + { + id: '@cf/nvidia/nemotron-3-120b-a12b', + name: 'nemotron-3-120b-a12b', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.5, output: 1.5 }, + contextWindow: 256000, + }, + { + id: '@cf/openai/gpt-oss-120b', + name: 'gpt-oss-120b', + input: ['text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.35, output: 0.75 }, + contextWindow: 128000, + }, + { + id: '@cf/openai/gpt-oss-20b', + name: 'gpt-oss-20b', + input: ['text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.2, output: 0.3 }, + contextWindow: 128000, + }, + { + id: '@cf/qwen/qwen2.5-coder-32b-instruct', + name: 'qwen2.5-coder-32b-instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.66, output: 1 }, + contextWindow: 32768, + }, + { + id: '@cf/qwen/qwen3-30b-a3b-fp8', + name: 'qwen3-30b-a3b-fp8', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.0509, output: 0.335 }, + contextWindow: 32768, + }, + { + id: '@cf/qwen/qwen3.8-27b', + name: 'qwen3.8-27b', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', xhigh: 'xhigh' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.45, output: 3.2, cacheRead: 0.05 }, + contextWindow: 262144, + }, + { + id: '@cf/qwen/qwq-32b', + name: 'qwq-32b', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.66, output: 1 }, + contextWindow: 24000, + }, + { + id: '@cf/swiss-ai/apertus-v1.5-8b', + name: 'apertus-v1.5-8b', + input: ['text', 'image'], + reasoning: false, + contextWindow: 262144, + }, + { + id: '@cf/utter-project/eurollm-9b-it', + name: 'eurollm-9b-it', + input: ['text'], + reasoning: false, + contextWindow: 32000, + }, + { + id: '@cf/zai-org/glm-4.7-flash', + name: 'glm-4.7-flash', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.0605, output: 0.4 }, + contextWindow: 131072, + }, + { + id: '@cf/zai-org/glm-5.2', + name: 'glm-5.2', + input: ['text'], + reasoning: { + levels: { off: 'none', high: 'high', max: 'max' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.4, output: 4.4, cacheRead: 0.26 }, + contextWindow: 262144, + }, + { + id: '@cf/zai-org/glm-5.3', + name: 'glm-5.3', + input: ['text'], + reasoning: { + levels: { low: 'low', high: 'high', max: 'max' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.4, output: 4.4, cacheRead: 0.26 }, + contextWindow: 1048576, + }, + { + id: '@cf/zai-org/glm-5.3-flash', + name: 'glm-5.3-flash', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', high: 'high', max: 'max' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.15, output: 0.5, cacheRead: 0.03 }, + contextWindow: 1048576, + }, +] diff --git a/packages/ai-cloudflare/vite.config.ts b/packages/ai-cloudflare/vite.config.ts index 982be0e207..00dd0ed7af 100644 --- a/packages/ai-cloudflare/vite.config.ts +++ b/packages/ai-cloudflare/vite.config.ts @@ -29,7 +29,12 @@ const config = defineConfig({ export default mergeConfig( config, tanstackViteConfig({ - entry: ['./src/index.ts', './src/byok.ts'], + entry: [ + './src/index.ts', + './src/models.ts', + './src/gateway-models.ts', + './src/byok.ts', + ], srcDir: './src', cjs: false, }), diff --git a/packages/ai-gemini/package.json b/packages/ai-gemini/package.json index 3fdf580a7c..cfa07e21fb 100644 --- a/packages/ai-gemini/package.json +++ b/packages/ai-gemini/package.json @@ -36,6 +36,10 @@ "./experimental": { "types": "./dist/esm/experimental/index.d.ts", "import": "./dist/esm/experimental/index.js" + }, + "./models": { + "types": "./dist/esm/models.d.ts", + "import": "./dist/esm/models.js" } }, "files": [ diff --git a/packages/ai-gemini/src/models.ts b/packages/ai-gemini/src/models.ts new file mode 100644 index 0000000000..94fe0a0c73 --- /dev/null +++ b/packages/ai-gemini/src/models.ts @@ -0,0 +1,460 @@ +// Generated by scripts/sync-model-catalogs.ts from modelschemas. Do not edit. +import type { ModelRecord } from '@tanstack/ai' + +/** Every Gemini chat model on modelschemas.com, sorted by id. */ +export const models: ReadonlyArray = [ + { + id: 'antigravity-preview-05-2026', + name: 'Antigravity Agent Preview', + input: ['text', 'image'], + reasoning: false, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'antigravity-preview-09-2026', + name: 'Antigravity Agent Preview', + input: ['text', 'image'], + reasoning: false, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'antigravity-preview-latest', + name: 'Antigravity Agent Preview Latest', + reasoning: false, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'aqa', + name: 'Model that performs Attributed Question Answering.', + reasoning: false, + contextWindow: 7168, + maxOutputTokens: 1024, + }, + { + id: 'deep-research-max-preview-04-2026', + name: 'Deep Research Max Preview (Apr-21-2026)', + input: ['text', 'image', 'audio', 'video', 'document'], + reasoning: { levels: {}, budget: false }, + contextWindow: 131072, + maxOutputTokens: 65536, + }, + { + id: 'deep-research-preview-04-2026', + name: 'Deep Research Preview (Apr-21-2026)', + input: ['text', 'image', 'audio', 'video', 'document'], + reasoning: { levels: {}, budget: false }, + contextWindow: 131072, + maxOutputTokens: 65536, + }, + { + id: 'deep-research-pro-preview-12-2025', + name: 'Deep Research Pro Preview (Dec-12-2025) [Rerouted]', + input: ['text', 'image', 'audio', 'video', 'document'], + reasoning: { levels: {}, budget: false }, + contextWindow: 131072, + maxOutputTokens: 65536, + }, + { + id: 'gemini-2.5-computer-use-preview-10-2025', + name: 'Gemini 2.5 Computer Use Preview 10-2025', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + contextWindow: 131072, + maxOutputTokens: 65536, + }, + { + id: 'gemini-2.5-flash', + name: 'Gemini 2.5 Flash', + input: ['text', 'image', 'audio', 'video'], + reasoning: { levels: {}, budget: true }, + prices: { currency: 'USD', input: 0.3, output: 2.5, cacheRead: 0.03 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-2.5-flash-lite', + name: 'Gemini 2.5 Flash-Lite', + input: ['text', 'image', 'audio', 'video', 'document'], + reasoning: { levels: {}, budget: true }, + prices: { currency: 'USD', input: 0.1, output: 0.4, cacheRead: 0.01 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-2.5-flash-native-audio-latest', + name: 'Gemini 2.5 Flash Native Audio Latest', + reasoning: { levels: {}, budget: false }, + contextWindow: 131072, + maxOutputTokens: 8192, + }, + { + id: 'gemini-2.5-flash-native-audio-preview-09-2025', + name: 'Gemini 2.5 Flash Native Audio Preview 09-2025', + reasoning: { levels: {}, budget: true }, + contextWindow: 131072, + maxOutputTokens: 8192, + }, + { + id: 'gemini-2.5-flash-native-audio-preview-12-2025', + name: 'Gemini 2.5 Flash Native Audio Preview 12-2025', + input: ['text', 'audio', 'video'], + reasoning: { levels: {}, budget: true }, + prices: { currency: 'USD', input: 0.5, output: 2 }, + contextWindow: 131072, + maxOutputTokens: 8192, + }, + { + id: 'gemini-2.5-pro', + name: 'Gemini 2.5 Pro', + input: ['text', 'image', 'audio', 'video', 'document'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 1.25, + output: 10, + cacheRead: 0.125, + tiers: [ + { inputTokensAbove: 200000, input: 2.5, output: 15, cacheRead: 0.25 }, + ], + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3-flash-preview', + name: 'Gemini 3 Flash Preview', + input: ['text', 'image', 'audio', 'video', 'document'], + reasoning: { + levels: { + minimal: 'MINIMAL', + low: 'LOW', + medium: 'MEDIUM', + high: 'HIGH', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.5, output: 3, cacheRead: 0.05 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.1-flash-lite', + name: 'Gemini 3.1 Flash Lite', + input: ['text', 'image', 'audio', 'video', 'document'], + reasoning: { + levels: { + minimal: 'MINIMAL', + low: 'LOW', + medium: 'MEDIUM', + high: 'HIGH', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.25, output: 1.5, cacheRead: 0.025 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.1-flash-lite-preview', + name: 'Gemini 3.1 Flash Lite Preview', + input: ['text', 'image', 'audio', 'video', 'document'], + reasoning: { + levels: { + minimal: 'MINIMAL', + low: 'LOW', + medium: 'MEDIUM', + high: 'HIGH', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.25, output: 1.5, cacheRead: 0.025 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.1-flash-live-preview', + name: 'Gemini 3.1 Flash Live Preview', + input: ['text', 'image', 'audio'], + reasoning: { + levels: { + minimal: 'MINIMAL', + low: 'LOW', + medium: 'MEDIUM', + high: 'HIGH', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.75, output: 4.5 }, + contextWindow: 131072, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.1-pro-preview', + name: 'Gemini 3.1 Pro Preview', + input: ['text', 'image', 'audio', 'video', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 2, + output: 12, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 200000, input: 4, output: 18, cacheRead: 0.4 }, + ], + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.1-pro-preview-customtools', + name: 'Gemini 3.1 Pro Preview Custom Tools', + input: ['text', 'image', 'audio', 'video', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 2, + output: 12, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 200000, input: 4, output: 18, cacheRead: 0.4 }, + ], + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.5-flash', + name: 'Gemini 3.5 Flash', + input: ['text', 'image', 'audio', 'video', 'document'], + reasoning: { levels: {}, budget: false }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.5-flash-lite', + name: 'Gemini 3.5 Flash Lite', + input: ['text', 'image', 'audio', 'video', 'document'], + reasoning: { + levels: { + minimal: 'MINIMAL', + low: 'LOW', + medium: 'MEDIUM', + high: 'HIGH', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.3, output: 2.5, cacheRead: 0.03 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.5-live-translate-preview', + name: 'Gemini 3.5 Live Translate Preview', + input: ['audio'], + reasoning: false, + prices: { currency: 'USD' }, + contextWindow: 16384, + maxOutputTokens: 32768, + }, + { + id: 'gemini-3.5-transcribe', + name: 'Gemini 3.5 Transcribe', + input: ['audio'], + reasoning: false, + prices: { currency: 'USD', output: 12 }, + contextWindow: 98304, + maxOutputTokens: 32768, + }, + { + id: 'gemini-3.5-transcribe-live', + name: 'Gemini 3.5 Transcribe Live', + input: ['audio'], + reasoning: false, + prices: { currency: 'USD', output: 21 }, + contextWindow: 131072, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.6-flash', + name: 'Gemini 3.6 Flash', + input: ['text', 'image', 'audio', 'video', 'document'], + reasoning: { + levels: { + minimal: 'MINIMAL', + low: 'LOW', + medium: 'MEDIUM', + high: 'HIGH', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.75, output: 3.75, cacheRead: 0.075 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.7-flash', + name: 'Gemini 3.7 Flash', + input: ['text', 'image', 'audio', 'video', 'document'], + reasoning: { + levels: { low: 'LOW', medium: 'MEDIUM', high: 'HIGH' }, + budget: false, + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.8-flash', + name: 'Gemini 3.8 Flash', + input: ['text', 'image', 'audio', 'video', 'document'], + reasoning: { + levels: { low: 'LOW', medium: 'MEDIUM', high: 'HIGH' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.75, output: 3.75, cacheRead: 0.075 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.8-live', + name: 'Gemini 3.8 Live', + input: ['text', 'image', 'audio'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.75, output: 4.5 }, + contextWindow: 131072, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.8-live-extended-thinking', + name: 'Gemini 3.8 Live Extended Thinking', + input: ['text', 'image', 'audio'], + reasoning: { + levels: { low: 'LOW', medium: 'MEDIUM', high: 'HIGH' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.75, output: 4.5 }, + contextWindow: 131072, + maxOutputTokens: 65536, + }, + { + id: 'gemini-4-argon', + name: 'Gemini 4 Argon', + input: ['text', 'image', 'audio', 'video', 'document'], + reasoning: { + levels: { low: 'LOW', medium: 'MEDIUM', high: 'HIGH' }, + budget: false, + }, + prices: { currency: 'USD', input: 2, output: 10, cacheRead: 0.1 }, + contextWindow: 1048576, + maxOutputTokens: 32768, + }, + { + id: 'gemini-flash-latest', + name: 'Gemini Flash Latest', + reasoning: { levels: {}, budget: false }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-flash-lite-latest', + name: 'Gemini Flash-Lite Latest', + reasoning: { levels: {}, budget: false }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-nano-banana-2.1', + name: 'Nano Banana 2.1', + input: ['text', 'image', 'video', 'document'], + reasoning: { + levels: { minimal: 'MINIMAL', medium: 'MEDIUM', high: 'HIGH' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.5, output: 7.5 }, + contextWindow: 65536, + maxOutputTokens: 65536, + }, + { + id: 'gemini-pro-latest', + name: 'Gemini Pro Latest', + reasoning: { levels: {}, budget: false }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-robotics-er-2-preview', + name: 'Gemini Robotics-ER 2 Preview', + input: ['text', 'image', 'audio', 'video'], + reasoning: { + levels: { + minimal: 'MINIMAL', + low: 'LOW', + medium: 'MEDIUM', + high: 'HIGH', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1, output: 5, cacheRead: 0.1 }, + contextWindow: 131072, + maxOutputTokens: 65536, + }, + { + id: 'gemini-robotics-er-2-streaming-preview', + name: 'Gemini Robotics-ER 2 Streaming Preview', + input: ['text', 'image', 'audio', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1, output: 5 }, + contextWindow: 131072, + maxOutputTokens: 65536, + }, + { + id: 'gemma-4-26b-a4b-it', + name: 'Gemma 4 26B A4B IT', + reasoning: { levels: {}, budget: false }, + contextWindow: 262144, + maxOutputTokens: 32768, + }, + { + id: 'gemma-4-31b-it', + name: 'Gemma 4 31B IT', + reasoning: { levels: {}, budget: false }, + contextWindow: 262144, + maxOutputTokens: 32768, + }, + { + id: 'lyria-3-clip-preview', + name: 'Lyria 3 Clip Preview', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD' }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'lyria-3-pro-preview', + name: 'Lyria 3 Pro Preview', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD' }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'lyria-3.5', + name: 'Lyria 3.5', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD' }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'nano-banana-pro-preview', + name: 'Nano Banana Pro', + reasoning: { levels: {}, budget: false }, + contextWindow: 131072, + maxOutputTokens: 32768, + }, +] diff --git a/packages/ai-gemini/vite.config.ts b/packages/ai-gemini/vite.config.ts index c026c9b811..616e93f677 100644 --- a/packages/ai-gemini/vite.config.ts +++ b/packages/ai-gemini/vite.config.ts @@ -31,6 +31,7 @@ export default mergeConfig( tanstackViteConfig({ entry: [ './src/index.ts', + './src/models.ts', './src/byok.ts', './src/tools/index.ts', './src/experimental/index.ts', diff --git a/packages/ai-grok/package.json b/packages/ai-grok/package.json index dd1ebef36a..90112603b3 100644 --- a/packages/ai-grok/package.json +++ b/packages/ai-grok/package.json @@ -36,6 +36,10 @@ "./vertex": { "types": "./dist/esm/vertex/index.d.ts", "import": "./dist/esm/vertex/index.js" + }, + "./models": { + "types": "./dist/esm/models.d.ts", + "import": "./dist/esm/models.js" } }, "files": [ diff --git a/packages/ai-grok/src/models.ts b/packages/ai-grok/src/models.ts new file mode 100644 index 0000000000..b136146545 --- /dev/null +++ b/packages/ai-grok/src/models.ts @@ -0,0 +1,148 @@ +// Generated by scripts/sync-model-catalogs.ts from modelschemas. Do not edit. +import type { ModelRecord } from '@tanstack/ai' + +/** Every xAI chat model on modelschemas.com, sorted by id. */ +export const models: ReadonlyArray = [ + { + id: 'grok-4.20-0309-non-reasoning', + name: 'Grok 4.20 0309 Non Reasoning', + input: ['text', 'image'], + reasoning: false, + prices: { + currency: 'USD', + input: 1.25, + output: 2.5, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 199999, input: 2.5, output: 5, cacheRead: 0.4 }, + ], + }, + contextWindow: 1000000, + }, + { + id: 'grok-4.20-0309-reasoning', + name: 'Grok 4.20 0309 Reasoning', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 1.25, + output: 2.5, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 199999, input: 2.5, output: 5, cacheRead: 0.4 }, + ], + }, + contextWindow: 1000000, + }, + { + id: 'grok-4.20-multi-agent-0309', + name: 'Grok 4.20 Multi Agent 0309', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 1.25, + output: 2.5, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 199999, input: 2.5, output: 5, cacheRead: 0.4 }, + ], + }, + contextWindow: 1000000, + }, + { + id: 'grok-4.3', + name: 'Grok 4.3', + input: ['text', 'image'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1.25, + output: 2.5, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 199999, input: 2.5, output: 5, cacheRead: 0.4 }, + ], + }, + contextWindow: 1000000, + }, + { + id: 'grok-4.5', + name: 'Grok 4.5', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 6, + cacheRead: 0.3, + tiers: [ + { inputTokensAbove: 199999, input: 4, output: 12, cacheRead: 0.6 }, + ], + }, + contextWindow: 500000, + }, + { + id: 'grok-4.6', + name: 'Grok 4.6', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 6, + cacheRead: 0.5, + tiers: [{ inputTokensAbove: 199999, input: 4, output: 12, cacheRead: 1 }], + }, + contextWindow: 500000, + }, + { + id: 'grok-4.7', + name: 'Grok 4.7', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 6, + cacheRead: 0.5, + tiers: [{ inputTokensAbove: 199999, input: 4, output: 12, cacheRead: 1 }], + }, + contextWindow: 500000, + }, + { + id: 'grok-build-0.1', + name: 'Grok Build 0.1', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 1, + output: 2, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 199999, input: 2, output: 4, cacheRead: 0.4 }, + ], + }, + contextWindow: 256000, + }, +] diff --git a/packages/ai-grok/vite.config.ts b/packages/ai-grok/vite.config.ts index 1573d3d471..ee1f8bba72 100644 --- a/packages/ai-grok/vite.config.ts +++ b/packages/ai-grok/vite.config.ts @@ -31,6 +31,7 @@ export default mergeConfig( tanstackViteConfig({ entry: [ './src/index.ts', + './src/models.ts', './src/byok.ts', './src/tools/index.ts', './src/vertex/index.ts', diff --git a/packages/ai-groq/package.json b/packages/ai-groq/package.json index e793ccc034..41b7731714 100644 --- a/packages/ai-groq/package.json +++ b/packages/ai-groq/package.json @@ -32,6 +32,10 @@ "./tools": { "types": "./dist/esm/tools/index.d.ts", "import": "./dist/esm/tools/index.js" + }, + "./models": { + "types": "./dist/esm/models.d.ts", + "import": "./dist/esm/models.js" } }, "files": [ diff --git a/packages/ai-groq/src/models.ts b/packages/ai-groq/src/models.ts new file mode 100644 index 0000000000..a87f6632d5 --- /dev/null +++ b/packages/ai-groq/src/models.ts @@ -0,0 +1,80 @@ +// Generated by scripts/sync-model-catalogs.ts from modelschemas. Do not edit. +import type { ModelRecord } from '@tanstack/ai' + +/** Every Groq chat model on modelschemas.com, sorted by id. */ +export const models: ReadonlyArray = [ + { + id: 'allam-2-7b', + name: 'allam-2-7b', + input: ['text'], + reasoning: false, + contextWindow: 4096, + maxOutputTokens: 4096, + }, + { + id: 'meta-llama/llama-prompt-guard-2-22m', + name: 'meta-llama/llama-prompt-guard-2-22m', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.03, output: 0.03 }, + contextWindow: 512, + maxOutputTokens: 512, + }, + { + id: 'meta-llama/llama-prompt-guard-2-86m', + name: 'meta-llama/llama-prompt-guard-2-86m', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.04, output: 0.04 }, + contextWindow: 512, + maxOutputTokens: 512, + }, + { + id: 'openai/gpt-oss-120b', + name: 'openai/gpt-oss-120b', + input: ['text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.15, output: 0.6, cacheRead: 0.075 }, + contextWindow: 131072, + maxOutputTokens: 65536, + }, + { + id: 'openai/gpt-oss-20b', + name: 'openai/gpt-oss-20b', + input: ['text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.075, output: 0.3, cacheRead: 0.037 }, + contextWindow: 131072, + maxOutputTokens: 65536, + }, + { + id: 'openai/gpt-oss-safeguard-20b', + name: 'openai/gpt-oss-safeguard-20b', + input: ['text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.075, output: 0.3, cacheRead: 0.037 }, + contextWindow: 131072, + maxOutputTokens: 65536, + }, + { + id: 'qwen/qwen3.8-27b', + name: 'qwen/qwen3.8-27b', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.8, output: 4 }, + contextWindow: 131072, + maxOutputTokens: 16384, + }, +] diff --git a/packages/ai-groq/vite.config.ts b/packages/ai-groq/vite.config.ts index 5e5c1069be..2be2e5728c 100644 --- a/packages/ai-groq/vite.config.ts +++ b/packages/ai-groq/vite.config.ts @@ -29,7 +29,12 @@ const config = defineConfig({ export default mergeConfig( config, tanstackViteConfig({ - entry: ['./src/index.ts', './src/byok.ts', './src/tools/index.ts'], + entry: [ + './src/index.ts', + './src/models.ts', + './src/byok.ts', + './src/tools/index.ts', + ], srcDir: './src', cjs: false, }), diff --git a/packages/ai-mistral/package.json b/packages/ai-mistral/package.json index 790545f845..656542b483 100644 --- a/packages/ai-mistral/package.json +++ b/packages/ai-mistral/package.json @@ -32,6 +32,10 @@ "./vertex": { "types": "./dist/esm/vertex/index.d.ts", "import": "./dist/esm/vertex/index.js" + }, + "./models": { + "types": "./dist/esm/models.d.ts", + "import": "./dist/esm/models.js" } }, "files": [ diff --git a/packages/ai-mistral/src/models.ts b/packages/ai-mistral/src/models.ts new file mode 100644 index 0000000000..76187e1b90 --- /dev/null +++ b/packages/ai-mistral/src/models.ts @@ -0,0 +1,292 @@ +// Generated by scripts/sync-model-catalogs.ts from modelschemas. Do not edit. +import type { ModelRecord } from '@tanstack/ai' + +/** Every Mistral chat model on modelschemas.com, sorted by id. */ +export const models: ReadonlyArray = [ + { + id: 'codestral-2508', + name: 'codestral-2508', + input: ['text', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.3, output: 0.9, cacheRead: 0.03 }, + contextWindow: 256000, + }, + { + id: 'codestral-latest', + name: 'codestral-latest', + input: ['text', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.3, output: 0.9, cacheRead: 0.03 }, + contextWindow: 256000, + }, + { + id: 'glm-5-2', + name: 'glm-5-2', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.4, output: 4.4, cacheRead: 0.14 }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: 'labs-leanstral-1-5-1', + name: 'labs-leanstral-1-5-1', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + contextWindow: 262144, + maxOutputTokens: 131072, + }, + { + id: 'magistral-medium-latest', + name: 'magistral-medium-latest', + input: ['text', 'image', 'document'], + reasoning: { levels: { off: 'none', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 1.5, output: 7.5, cacheRead: 0.15 }, + contextWindow: 262144, + }, + { + id: 'magistral-small-latest', + name: 'magistral-small-latest', + input: ['text', 'image', 'document'], + reasoning: { levels: { off: 'none', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 0.15, output: 0.6, cacheRead: 0.015 }, + contextWindow: 262144, + }, + { + id: 'ministral-14b-2512', + name: 'ministral-14b-2512', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.2, output: 0.2, cacheRead: 0.02 }, + contextWindow: 262144, + }, + { + id: 'ministral-14b-latest', + name: 'ministral-14b-latest', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.2, output: 0.2, cacheRead: 0.02 }, + contextWindow: 262144, + }, + { + id: 'ministral-3b-2512', + name: 'ministral-3b-2512', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.1, cacheRead: 0.01 }, + contextWindow: 131072, + }, + { + id: 'ministral-3b-latest', + name: 'ministral-3b-latest', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.1, cacheRead: 0.01 }, + contextWindow: 131072, + }, + { + id: 'ministral-8b-2512', + name: 'ministral-8b-2512', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.15, cacheRead: 0.015 }, + contextWindow: 262144, + }, + { + id: 'ministral-8b-latest', + name: 'ministral-8b-latest', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.15, cacheRead: 0.015 }, + contextWindow: 262144, + }, + { + id: 'mistral-code-fim-latest', + name: 'mistral-code-fim-latest', + input: ['text', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.3, output: 0.9, cacheRead: 0.03 }, + contextWindow: 256000, + }, + { + id: 'mistral-code-latest', + name: 'mistral-code-latest', + input: ['text', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.3, output: 0.9, cacheRead: 0.03 }, + contextWindow: 256000, + }, + { + id: 'mistral-large-2512', + name: 'mistral-large-2512', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.5, output: 1.5, cacheRead: 0.05 }, + contextWindow: 262144, + }, + { + id: 'mistral-large-4', + name: 'mistral-large-4', + input: ['text', 'image', 'document'], + reasoning: { levels: { off: 'none', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 1.36, output: 4.18, cacheRead: 0.14 }, + contextWindow: 1048576, + }, + { + id: 'mistral-large-4-0', + name: 'mistral-large-4-0', + input: ['text', 'image', 'document'], + reasoning: { levels: { off: 'none', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 1.36, output: 4.18, cacheRead: 0.14 }, + contextWindow: 1048576, + }, + { + id: 'mistral-large-latest', + name: 'mistral-large-latest', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.5, output: 1.5, cacheRead: 0.05 }, + contextWindow: 262144, + }, + { + id: 'mistral-medium', + name: 'mistral-medium', + input: ['text', 'image', 'document'], + reasoning: { levels: { off: 'none', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 1.5, output: 7.5, cacheRead: 0.15 }, + contextWindow: 262144, + }, + { + id: 'mistral-medium-2604', + name: 'mistral-medium-2604', + input: ['text', 'image', 'document'], + reasoning: { levels: { off: 'none', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 1.5, output: 7.5, cacheRead: 0.15 }, + contextWindow: 262144, + }, + { + id: 'mistral-medium-3', + name: 'mistral-medium-3', + input: ['text', 'image', 'document'], + reasoning: { levels: { off: 'none', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 1.5, output: 7.5, cacheRead: 0.15 }, + contextWindow: 262144, + }, + { + id: 'mistral-medium-3-5', + name: 'mistral-medium-3-5', + input: ['text', 'image', 'document'], + reasoning: { levels: { off: 'none', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 1.5, output: 7.5, cacheRead: 0.15 }, + contextWindow: 262144, + }, + { + id: 'mistral-medium-latest', + name: 'mistral-medium-latest', + input: ['text', 'image', 'document'], + reasoning: { levels: { off: 'none', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 1.5, output: 7.5, cacheRead: 0.15 }, + contextWindow: 262144, + }, + { + id: 'mistral-small-2603', + name: 'mistral-small-2603', + input: ['text', 'image', 'document'], + reasoning: { levels: { off: 'none', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 0.15, output: 0.6, cacheRead: 0.015 }, + contextWindow: 262144, + }, + { + id: 'mistral-small-latest', + name: 'mistral-small-latest', + input: ['text', 'image', 'document'], + reasoning: { levels: { off: 'none', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 0.15, output: 0.6, cacheRead: 0.015 }, + contextWindow: 262144, + }, + { + id: 'mistral-vibe-cli-fast', + name: 'mistral-vibe-cli-fast', + input: ['text', 'image', 'document'], + reasoning: { levels: { off: 'none', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 0.15, output: 0.6, cacheRead: 0.015 }, + contextWindow: 262144, + }, + { + id: 'mistral-vibe-cli-latest', + name: 'mistral-vibe-cli-latest', + input: ['text', 'image', 'document'], + reasoning: { levels: { off: 'none', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 1.5, output: 7.5, cacheRead: 0.15 }, + contextWindow: 262144, + }, + { + id: 'mistral-vibe-cli-with-tools', + name: 'mistral-vibe-cli-with-tools', + input: ['text', 'image', 'document'], + reasoning: { levels: { off: 'none', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 1.5, output: 7.5, cacheRead: 0.15 }, + contextWindow: 262144, + }, + { + id: 'voxtral-small-2507', + name: 'voxtral-small-2507', + input: ['text', 'audio', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.4 }, + contextWindow: 32768, + }, + { + id: 'voxtral-small-latest', + name: 'voxtral-small-latest', + input: ['text', 'audio', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.4 }, + contextWindow: 32768, + }, + { + id: 'zai-glm-5', + name: 'zai-glm-5', + input: ['text'], + reasoning: { + levels: { low: 'low', high: 'high', max: 'max' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.4, output: 4.4, cacheRead: 0.14 }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: 'zai-glm-5-3', + name: 'zai-glm-5-3', + input: ['text'], + reasoning: { + levels: { low: 'low', high: 'high', max: 'max' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.4, output: 4.4, cacheRead: 0.14 }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: 'zai-glm-5-3-flash', + name: 'zai-glm-5-3-flash', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.15, output: 0.5, cacheRead: 0.03 }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: 'zai-glm-latest', + name: 'zai-glm-latest', + input: ['text'], + reasoning: { + levels: { low: 'low', high: 'high', max: 'max' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.4, output: 4.4, cacheRead: 0.14 }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, +] diff --git a/packages/ai-mistral/vite.config.ts b/packages/ai-mistral/vite.config.ts index 9914ef34c2..7957c13ea3 100644 --- a/packages/ai-mistral/vite.config.ts +++ b/packages/ai-mistral/vite.config.ts @@ -29,7 +29,12 @@ const config = defineConfig({ export default mergeConfig( config, tanstackViteConfig({ - entry: ['./src/index.ts', './src/byok.ts', './src/vertex/index.ts'], + entry: [ + './src/index.ts', + './src/models.ts', + './src/byok.ts', + './src/vertex/index.ts', + ], srcDir: './src', cjs: false, }), diff --git a/packages/ai-openai/package.json b/packages/ai-openai/package.json index c9cc3d4840..f4fdf9fad3 100644 --- a/packages/ai-openai/package.json +++ b/packages/ai-openai/package.json @@ -40,6 +40,14 @@ "./tools": { "types": "./dist/esm/tools/index.d.ts", "import": "./dist/esm/tools/index.js" + }, + "./models": { + "types": "./dist/esm/models.d.ts", + "import": "./dist/esm/models.js" + }, + "./azure-models": { + "types": "./dist/esm/azure-models.d.ts", + "import": "./dist/esm/azure-models.js" } }, "files": [ diff --git a/packages/ai-openai/src/azure-models.ts b/packages/ai-openai/src/azure-models.ts new file mode 100644 index 0000000000..8e55f16869 --- /dev/null +++ b/packages/ai-openai/src/azure-models.ts @@ -0,0 +1,541 @@ +// Generated by scripts/sync-model-catalogs.ts from modelschemas. Do not edit. +import type { ModelRecord } from '@tanstack/ai' + +/** Every Azure OpenAI chat model on modelschemas.com, sorted by id. */ +export const models: ReadonlyArray = [ + { + id: 'codex-mini', + name: 'codex-mini', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.5, output: 6, cacheRead: 0.375 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'computer-use-preview', + name: 'computer-use-preview', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 3, output: 12 }, + contextWindow: 8192, + maxOutputTokens: 1024, + }, + { + id: 'gpt-4', + name: 'gpt-4', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 10, output: 30 }, + contextWindow: 128000, + maxOutputTokens: 4096, + }, + { + id: 'gpt-4.1', + name: 'gpt-4.1', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 2, output: 8, cacheRead: 0.5 }, + contextWindow: 300000, + maxOutputTokens: 32768, + }, + { + id: 'gpt-4.1-mini', + name: 'gpt-4.1-mini', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.4, output: 1.6, cacheRead: 0.1 }, + contextWindow: 300000, + maxOutputTokens: 32768, + }, + { + id: 'gpt-4.1-nano', + name: 'gpt-4.1-nano', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.4, cacheRead: 0.025 }, + contextWindow: 300000, + maxOutputTokens: 32768, + }, + { + id: 'gpt-4o', + name: 'gpt-4o', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 2.5, output: 10, cacheRead: 1.25 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-4o-mini', + name: 'gpt-4o-mini', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.6, cacheRead: 0.075 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-5', + name: 'gpt-5', + input: ['text', 'image'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5-codex', + name: 'gpt-5-codex', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5-mini', + name: 'gpt-5-mini', + input: ['text', 'image'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.25, output: 2, cacheRead: 0.025 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5-nano', + name: 'gpt-5-nano', + input: ['text', 'image'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.05, output: 0.4, cacheRead: 0.005 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5-pro', + name: 'gpt-5-pro', + input: ['text', 'image'], + reasoning: { levels: { high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 15, output: 120 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.1', + name: 'gpt-5.1', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.1-codex', + name: 'gpt-5.1-codex', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.1-codex-max', + name: 'gpt-5.1-codex-max', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.1-codex-mini', + name: 'gpt-5.1-codex-mini', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.25, output: 2, cacheRead: 0.025 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.2', + name: 'gpt-5.2', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.75, output: 14, cacheRead: 0.175 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.2-codex', + name: 'gpt-5.2-codex', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.75, output: 14, cacheRead: 0.175 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.3-codex', + name: 'gpt-5.3-codex', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.75, output: 14, cacheRead: 0.175 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.4', + name: 'gpt-5.4', + input: ['text', 'image'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.5, + output: 15, + cacheRead: 0.25, + tiers: [ + { inputTokensAbove: 272000, input: 5, output: 22.5, cacheRead: 0.5 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.4-mini', + name: 'gpt-5.4-mini', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.75, output: 4.5, cacheRead: 0.075 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.4-nano', + name: 'gpt-5.4-nano', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.2, output: 1.25, cacheRead: 0.02 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.4-pro', + name: 'gpt-5.4-pro', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 30, + output: 180, + tiers: [{ inputTokensAbove: 272000, input: 60, output: 270 }], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.5', + name: 'gpt-5.5', + input: ['text', 'image'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.6-luna', + name: 'gpt-5.6-luna', + input: ['text', 'image'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.6-sol', + name: 'gpt-5.6-sol', + input: ['text', 'image'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.6-terra', + name: 'gpt-5.6-terra', + input: ['text', 'image'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-6-astra', + name: 'gpt-6-astra', + input: ['text', 'image'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-6-luna', + name: 'gpt-6-luna', + input: ['text', 'image'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-6-sol', + name: 'gpt-6-sol', + input: ['text', 'image'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-6.1-sol', + name: 'gpt-6.1-sol', + input: ['text', 'image'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-chat-latest', + name: 'gpt-chat-latest', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 5, output: 30, cacheRead: 0.5 }, + contextWindow: 128000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-oss-120b', + name: 'gpt-oss-120b', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.15, output: 0.6 }, + contextWindow: 131072, + maxOutputTokens: 131072, + }, + { + id: 'gpt-oss-20b', + name: 'gpt-oss-20b', + input: ['text'], + reasoning: { levels: {}, budget: false }, + contextWindow: 131072, + maxOutputTokens: 131072, + }, + { + id: 'o1', + name: 'o1', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 15, output: 60, cacheRead: 7.5 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'o1-mini', + name: 'o1-mini', + reasoning: false, + prices: { currency: 'USD', input: 1.1, output: 4.4, cacheRead: 0.55 }, + contextWindow: 128000, + maxOutputTokens: 65536, + }, + { + id: 'o3', + name: 'o3', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 2, output: 8, cacheRead: 0.5 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'o3-mini', + name: 'o3-mini', + input: ['text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.1, output: 4.4, cacheRead: 0.55 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'o3-pro', + name: 'o3-pro', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 20, output: 80 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'o4-mini', + name: 'o4-mini', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.1, output: 4.4, cacheRead: 0.275 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, +] diff --git a/packages/ai-openai/src/models.ts b/packages/ai-openai/src/models.ts new file mode 100644 index 0000000000..2406a1df18 --- /dev/null +++ b/packages/ai-openai/src/models.ts @@ -0,0 +1,1342 @@ +// Generated by scripts/sync-model-catalogs.ts from modelschemas. Do not edit. +import type { ModelRecord } from '@tanstack/ai' + +/** Every OpenAI chat model on modelschemas.com, sorted by id. */ +export const models: ReadonlyArray = [ + { + id: 'babbage-002', + name: 'Babbage 002', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.4, output: 0.4 }, + maxOutputTokens: 16384, + }, + { + id: 'chat-latest', + name: 'Chat Latest', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 5, output: 30, cacheRead: 0.5 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'davinci-002', + name: 'Davinci 002', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 2, output: 2 }, + maxOutputTokens: 16384, + }, + { + id: 'gpt-3.5-turbo', + name: 'GPT 3.5 Turbo', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.5, output: 1.5 }, + contextWindow: 16385, + maxOutputTokens: 4096, + }, + { + id: 'gpt-3.5-turbo-0125', + name: 'GPT 3.5 Turbo 0125', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.5, output: 1.5 }, + contextWindow: 16385, + maxOutputTokens: 4096, + }, + { + id: 'gpt-3.5-turbo-1106', + name: 'GPT 3.5 Turbo 1106', + input: ['text'], + reasoning: false, + contextWindow: 16385, + maxOutputTokens: 4096, + }, + { id: 'gpt-3.5-turbo-16k', name: 'GPT 3.5 Turbo 16k', reasoning: false }, + { + id: 'gpt-3.5-turbo-instruct', + name: 'GPT 3.5 Turbo Instruct', + input: ['text'], + reasoning: false, + contextWindow: 16385, + maxOutputTokens: 4096, + }, + { + id: 'gpt-3.5-turbo-instruct-0914', + name: 'GPT 3.5 Turbo Instruct 0914', + reasoning: false, + }, + { + id: 'gpt-4', + name: 'GPT 4', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 30, output: 60 }, + contextWindow: 8192, + maxOutputTokens: 8192, + }, + { + id: 'gpt-4-0613', + name: 'GPT 4 0613', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 30, output: 60 }, + contextWindow: 8192, + maxOutputTokens: 8192, + }, + { + id: 'gpt-4-turbo', + name: 'GPT 4 Turbo', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 10, output: 30 }, + contextWindow: 128000, + maxOutputTokens: 4096, + }, + { + id: 'gpt-4-turbo-2024-04-09', + name: 'GPT 4 Turbo 2024 04 09', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 10, output: 30 }, + contextWindow: 128000, + maxOutputTokens: 4096, + }, + { + id: 'gpt-4.1', + name: 'GPT 4.1', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 2, output: 8, cacheRead: 0.5 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'gpt-4.1-2025-04-14', + name: 'GPT 4.1 2025 04 14', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 2, output: 8, cacheRead: 0.5 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'gpt-4.1-mini', + name: 'GPT 4.1 Mini', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.4, output: 1.6, cacheRead: 0.1 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'gpt-4.1-mini-2025-04-14', + name: 'GPT 4.1 Mini 2025 04 14', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.4, output: 1.6, cacheRead: 0.1 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'gpt-4.1-nano', + name: 'GPT 4.1 Nano', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.4, cacheRead: 0.025 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'gpt-4.1-nano-2025-04-14', + name: 'GPT 4.1 Nano 2025 04 14', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.4, cacheRead: 0.025 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'gpt-4o', + name: 'GPT 4o', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 2.5, output: 10, cacheRead: 1.25 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-4o-2024-05-13', + name: 'GPT 4o 2024 05 13', + input: ['text', 'image', 'document'], + reasoning: false, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-4o-2024-08-06', + name: 'GPT 4o 2024 08 06', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 2.5, output: 10, cacheRead: 1.25 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-4o-2024-11-20', + name: 'GPT 4o 2024 11 20', + input: ['text', 'image', 'document'], + reasoning: false, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-4o-mini', + name: 'GPT 4o Mini', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.6, cacheRead: 0.075 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-4o-mini-2024-07-18', + name: 'GPT 4o Mini 2024 07 18', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.6, cacheRead: 0.075 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-4o-mini-search-preview', + name: 'GPT 4o Mini Search Preview', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.6 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-4o-mini-search-preview-2025-03-11', + name: 'GPT 4o Mini Search Preview 2025 03 11', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.6 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-4o-search-preview', + name: 'GPT 4o Search Preview', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 2.5, output: 10 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-4o-search-preview-2025-03-11', + name: 'GPT 4o Search Preview 2025 03 11', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 2.5, output: 10 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-5', + name: 'GPT 5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5-2025-08-07', + name: 'GPT 5 2025 08 07', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5-chat-latest', + name: 'GPT 5 Chat Latest', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-5-codex', + name: 'GPT 5 Codex', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5-mini', + name: 'GPT 5 Mini', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.25, output: 2, cacheRead: 0.025 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5-mini-2025-08-07', + name: 'GPT 5 Mini 2025 08 07', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.25, output: 2, cacheRead: 0.025 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5-nano', + name: 'GPT 5 Nano', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.05, output: 0.4, cacheRead: 0.005 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5-nano-2025-08-07', + name: 'GPT 5 Nano 2025 08 07', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.05, output: 0.4, cacheRead: 0.005 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5-pro', + name: 'GPT 5 Pro', + input: ['text', 'image', 'document'], + reasoning: { levels: { high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 15, output: 120 }, + contextWindow: 400000, + maxOutputTokens: 272000, + }, + { + id: 'gpt-5-pro-2025-10-06', + name: 'GPT 5 Pro 2025 10 06', + input: ['text', 'image', 'document'], + reasoning: { levels: { high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 15, output: 120 }, + contextWindow: 400000, + maxOutputTokens: 272000, + }, + { + id: 'gpt-5-search-api', + name: 'GPT 5 Search Api', + reasoning: false, + prices: { currency: 'USD', input: 1.25, output: 0.125, cacheRead: 10 }, + }, + { + id: 'gpt-5-search-api-2025-10-14', + name: 'GPT 5 Search Api 2025 10 14', + reasoning: false, + }, + { + id: 'gpt-5.1', + name: 'GPT 5.1', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.1-2025-11-13', + name: 'GPT 5.1 2025 11 13', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.1-chat-latest', + name: 'GPT 5.1 Chat Latest', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-5.1-codex', + name: 'GPT 5.1 Codex', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.1-codex-max', + name: 'GPT 5.1 Codex Max', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.1-codex-mini', + name: 'GPT 5.1 Codex Mini', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.25, output: 2, cacheRead: 0.025 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.2', + name: 'GPT 5.2', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1.75, output: 14, cacheRead: 0.175 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.2-2025-12-11', + name: 'GPT 5.2 2025 12 11', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1.75, output: 14, cacheRead: 0.175 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.2-chat-latest', + name: 'GPT 5.2 Chat Latest', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 1.75, output: 14, cacheRead: 0.175 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-5.2-codex', + name: 'GPT 5.2 Codex', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.75, output: 14, cacheRead: 0.175 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.2-pro', + name: 'GPT 5.2 Pro', + input: ['text', 'image'], + reasoning: { + levels: { medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { currency: 'USD', input: 21, output: 168 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.2-pro-2025-12-11', + name: 'GPT 5.2 Pro 2025 12 11', + input: ['text', 'image'], + reasoning: { + levels: { medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { currency: 'USD', input: 21, output: 168 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.3-chat-latest', + name: 'GPT 5.3 Chat Latest', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 1.75, output: 14, cacheRead: 0.175 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-5.3-codex', + name: 'GPT 5.3 Codex', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.75, output: 14, cacheRead: 0.175 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.4', + name: 'GPT 5.4', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.5, + output: 15, + cacheRead: 0.25, + tiers: [ + { inputTokensAbove: 272000, input: 5, output: 22.5, cacheRead: 0.5 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.4-2026-03-05', + name: 'GPT 5.4 2026 03 05', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.5, + output: 15, + cacheRead: 0.25, + tiers: [ + { inputTokensAbove: 272000, input: 5, output: 22.5, cacheRead: 0.5 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.4-mini', + name: 'GPT 5.4 Mini', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.75, output: 4.5, cacheRead: 0.075 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.4-mini-2026-03-17', + name: 'GPT 5.4 Mini 2026 03 17', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.75, output: 4.5, cacheRead: 0.075 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.4-nano', + name: 'GPT 5.4 Nano', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.2, output: 1.25, cacheRead: 0.02 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.4-nano-2026-03-17', + name: 'GPT 5.4 Nano 2026 03 17', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.2, output: 1.25, cacheRead: 0.02 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.4-pro', + name: 'GPT 5.4 Pro', + input: ['text', 'image'], + reasoning: { + levels: { medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 30, + output: 180, + tiers: [{ inputTokensAbove: 272000, input: 60, output: 270 }], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.4-pro-2026-03-05', + name: 'GPT 5.4 Pro 2026 03 05', + input: ['text', 'image'], + reasoning: { + levels: { medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 30, + output: 180, + tiers: [{ inputTokensAbove: 272000, input: 60, output: 270 }], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.5', + name: 'GPT 5.5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 30, + cacheRead: 0.5, + tiers: [ + { inputTokensAbove: 272000, input: 10, output: 45, cacheRead: 1 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.5-2026-04-23', + name: 'GPT 5.5 2026 04 23', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 30, + cacheRead: 0.5, + tiers: [ + { inputTokensAbove: 272000, input: 10, output: 45, cacheRead: 1 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.5-pro', + name: 'GPT 5.5 Pro', + input: ['text', 'image'], + reasoning: { + levels: { medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { currency: 'USD', input: 30, output: 180 }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.5-pro-2026-04-23', + name: 'GPT 5.5 Pro 2026 04 23', + input: ['text', 'image'], + reasoning: { + levels: { medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { currency: 'USD', input: 30, output: 180 }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.6-luna', + name: 'GPT 5.6 Luna', + input: ['text', 'image'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.2, + output: 1.2, + cacheRead: 0.02, + cacheWrite: 0.25, + tiers: [ + { + inputTokensAbove: 272000, + input: 0.4, + output: 1.8, + cacheRead: 0.04, + cacheWrite: 0.5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.6-sol', + name: 'GPT 5.6 Sol', + input: ['text', 'image'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 4, + output: 20, + cacheRead: 0.4, + cacheWrite: 5, + tiers: [ + { + inputTokensAbove: 272000, + input: 8, + output: 30, + cacheRead: 0.8, + cacheWrite: 10, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-5.6-terra', + name: 'GPT 5.6 Terra', + input: ['text', 'image'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 12, + cacheRead: 0.2, + cacheWrite: 2.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 4, + output: 18, + cacheRead: 0.4, + cacheWrite: 5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-6-astra', + name: 'GPT 6 Astra', + input: ['text', 'image'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 1, + cacheWrite: 12.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 20, + output: 75, + cacheRead: 2, + cacheWrite: 25, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-6-luna', + name: 'GPT 6 Luna', + input: ['text', 'image'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.1, + output: 0.5, + cacheRead: 0.01, + cacheWrite: 0.125, + tiers: [ + { + inputTokensAbove: 272000, + input: 0.2, + output: 0.75, + cacheRead: 0.02, + cacheWrite: 0.25, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-6-sol', + name: 'GPT 6 Sol', + input: ['text', 'image'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.2, + cacheWrite: 2.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 4, + output: 15, + cacheRead: 0.4, + cacheWrite: 5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-6.1-sol', + name: 'GPT 6.1 Sol', + input: ['text', 'image'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.1, + cacheWrite: 2.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 4, + output: 15, + cacheRead: 0.2, + cacheWrite: 5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'gpt-audio', + name: 'GPT Audio', + input: ['text', 'audio'], + reasoning: false, + prices: { currency: 'USD', input: 2.5, output: 10 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-audio-1.5', + name: 'GPT Audio 1.5', + input: ['text', 'audio'], + reasoning: false, + prices: { currency: 'USD', input: 2.5, output: 10 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-audio-2025-08-28', + name: 'GPT Audio 2025 08 28', + input: ['text', 'audio'], + reasoning: false, + prices: { currency: 'USD', input: 2.5, output: 10 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-audio-mini', + name: 'GPT Audio Mini', + input: ['text', 'audio'], + reasoning: false, + prices: { currency: 'USD', input: 0.6, output: 2.4 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-audio-mini-2025-10-06', + name: 'GPT Audio Mini 2025 10 06', + input: ['text', 'audio'], + reasoning: false, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-audio-mini-2025-12-15', + name: 'GPT Audio Mini 2025 12 15', + input: ['text', 'audio'], + reasoning: false, + prices: { currency: 'USD', input: 0.6, output: 2.4 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'gpt-live-1', + name: 'GPT Live 1', + input: ['audio', 'text'], + reasoning: false, + prices: { currency: 'USD' }, + }, + { + id: 'gpt-realtime', + name: 'GPT Realtime', + input: ['text', 'audio', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 4, output: 16, cacheRead: 0.4 }, + contextWindow: 32000, + maxOutputTokens: 4096, + }, + { + id: 'gpt-realtime-1.5', + name: 'GPT Realtime 1.5', + input: ['text', 'audio', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 4, output: 16, cacheRead: 0.4 }, + contextWindow: 32000, + maxOutputTokens: 4096, + }, + { + id: 'gpt-realtime-2', + name: 'GPT Realtime 2', + input: ['text', 'audio', 'image'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 4, output: 24, cacheRead: 0.4 }, + contextWindow: 128000, + maxOutputTokens: 32000, + }, + { + id: 'gpt-realtime-2.1', + name: 'GPT Realtime 2.1', + input: ['text', 'audio', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 4, output: 24, cacheRead: 0.4 }, + contextWindow: 128000, + maxOutputTokens: 32000, + }, + { + id: 'gpt-realtime-2.1-mini', + name: 'GPT Realtime 2.1 Mini', + input: ['text', 'audio', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.6, output: 2.4, cacheRead: 0.06 }, + contextWindow: 128000, + maxOutputTokens: 32000, + }, + { + id: 'gpt-realtime-2025-08-28', + name: 'GPT Realtime 2025 08 28', + input: ['text', 'audio', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 4, output: 16, cacheRead: 0.4 }, + contextWindow: 32000, + maxOutputTokens: 4096, + }, + { + id: 'gpt-realtime-mini', + name: 'GPT Realtime Mini', + input: ['text', 'image', 'audio'], + reasoning: false, + prices: { currency: 'USD', input: 0.6, output: 2.4, cacheRead: 0.06 }, + contextWindow: 32000, + maxOutputTokens: 4096, + }, + { + id: 'gpt-realtime-mini-2025-12-15', + name: 'GPT Realtime Mini 2025 12 15', + input: ['text', 'image', 'audio'], + reasoning: false, + prices: { currency: 'USD', input: 0.6, output: 2.4, cacheRead: 0.06 }, + contextWindow: 32000, + maxOutputTokens: 4096, + }, + { + id: 'gpt-realtime-translate', + name: 'GPT Realtime Translate', + input: ['audio'], + reasoning: false, + prices: { currency: 'USD' }, + contextWindow: 16000, + maxOutputTokens: 2000, + }, + { + id: 'gpt-realtime-whisper', + name: 'GPT Realtime Whisper', + input: ['audio', 'text'], + reasoning: false, + prices: { currency: 'USD' }, + contextWindow: 16000, + maxOutputTokens: 2000, + }, + { + id: 'o1', + name: 'O1', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 15, output: 60, cacheRead: 7.5 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'o1-2024-12-17', + name: 'O1 2024 12 17', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 15, output: 60, cacheRead: 7.5 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'o1-pro', + name: 'O1 Pro', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 150, output: 600 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'o1-pro-2025-03-19', + name: 'O1 Pro 2025 03 19', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 150, output: 600 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'o3', + name: 'O3', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 2, output: 8, cacheRead: 0.5 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'o3-2025-04-16', + name: 'O3 2025 04 16', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 2, output: 8, cacheRead: 0.5 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'o3-deep-research', + name: 'O3 Deep Research', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 10, output: 40, cacheRead: 2.5 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'o3-deep-research-2025-06-26', + name: 'O3 Deep Research 2025 06 26', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 10, output: 40, cacheRead: 2.5 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'o3-mini', + name: 'O3 Mini', + input: ['text', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.1, output: 4.4, cacheRead: 0.55 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'o3-mini-2025-01-31', + name: 'O3 Mini 2025 01 31', + input: ['text', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.1, output: 4.4, cacheRead: 0.55 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'o3-pro', + name: 'O3 Pro', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 20, output: 80 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'o3-pro-2025-06-10', + name: 'O3 Pro 2025 06 10', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 20, output: 80 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'o4-mini', + name: 'O4 Mini', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.1, output: 4.4, cacheRead: 0.275 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'o4-mini-2025-04-16', + name: 'O4 Mini 2025 04 16', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.1, output: 4.4, cacheRead: 0.275 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'o4-mini-deep-research', + name: 'O4 Mini Deep Research', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 2, output: 8, cacheRead: 0.5 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'o4-mini-deep-research-2025-06-26', + name: 'O4 Mini Deep Research 2025 06 26', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 2, output: 8, cacheRead: 0.5 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, +] diff --git a/packages/ai-openai/vite.config.ts b/packages/ai-openai/vite.config.ts index da5b132087..4382fe4250 100644 --- a/packages/ai-openai/vite.config.ts +++ b/packages/ai-openai/vite.config.ts @@ -31,6 +31,8 @@ export default mergeConfig( tanstackViteConfig({ entry: [ './src/index.ts', + './src/models.ts', + './src/azure-models.ts', './src/byok.ts', './src/compatible/index.ts', './src/siwc.ts', diff --git a/packages/ai-openrouter/package.json b/packages/ai-openrouter/package.json index 441d1eeedb..5abf87a02d 100644 --- a/packages/ai-openrouter/package.json +++ b/packages/ai-openrouter/package.json @@ -40,6 +40,10 @@ "./pkce": { "types": "./dist/esm/pkce.d.ts", "import": "./dist/esm/pkce.js" + }, + "./models": { + "types": "./dist/esm/models.d.ts", + "import": "./dist/esm/models.js" } }, "files": [ diff --git a/packages/ai-openrouter/src/models.ts b/packages/ai-openrouter/src/models.ts new file mode 100644 index 0000000000..501c695f4f --- /dev/null +++ b/packages/ai-openrouter/src/models.ts @@ -0,0 +1,6689 @@ +// Generated by scripts/sync-model-catalogs.ts from modelschemas. Do not edit. +import type { ModelRecord } from '@tanstack/ai' + +/** Every OpenRouter chat model on modelschemas.com, sorted by id. */ +export const models: ReadonlyArray = [ + { + id: '~anthropic/claude-fable-latest', + name: 'Anthropic: Claude Fable Latest', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 0.25, + cacheWrite: 12.5, + cacheWrite1h: 20, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: '~anthropic/claude-haiku-latest', + name: 'Anthropic: Claude Haiku Latest', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.1, + output: 0.5, + cacheRead: 0.01, + cacheWrite: 0.125, + cacheWrite1h: 0.2, + tiers: [ + { + inputTokensAbove: 100000, + input: 0.5, + output: 2.5, + cacheRead: 0.05, + cacheWrite: 0.625, + cacheWrite1h: 1, + }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: '~anthropic/claude-opus-latest', + name: 'Anthropic: Claude Opus Latest', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 4, + output: 20, + cacheRead: 0.2, + cacheWrite: 5, + cacheWrite1h: 8, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: '~anthropic/claude-sonnet-latest', + name: 'Anthropic: Claude Sonnet Latest', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.1, + cacheWrite: 2.5, + cacheWrite1h: 4, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: '~deepseek/deepseek-flash-latest', + name: 'DeepSeek: DeepSeek Flash Latest', + input: ['text', 'image'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.02, output: 1, cacheRead: 0.015 }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: '~deepseek/deepseek-pro-latest', + name: 'DeepSeek: DeepSeek Pro Latest', + input: ['text'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.2565, output: 8, cacheRead: 0.26 }, + contextWindow: 1048576, + maxOutputTokens: 393216, + }, + { + id: '~deepseek/deepseek-v4-flash-latest', + name: 'DeepSeek: DeepSeek V4 Flash Latest', + input: ['text'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low', off: 'none' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.0475, + output: 0.1568, + cacheRead: 0.028, + }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: '~google/gemini-flash-latest', + name: 'Google: Gemini Flash Latest', + input: ['text', 'image', 'video', 'document', 'audio'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.75, + output: 3.75, + cacheRead: 0.075, + cacheWrite: 0.041667, + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: '~google/gemini-pro-latest', + name: 'Google: Gemini Pro Latest', + input: ['audio', 'document', 'image', 'text', 'video'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.1, + cacheWrite: 0.1875, + }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: '~moonshotai/kimi-latest', + name: 'MoonshotAI: Kimi Latest', + input: ['text', 'image', 'video'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.18, output: 16, cacheRead: 0.17 }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: '~openai/gpt-astra-latest', + name: 'OpenAI: GPT Astra Latest', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 1, + cacheWrite: 12.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 20, + output: 75, + cacheRead: 2, + cacheWrite: 25, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: '~openai/gpt-luna-latest', + name: 'OpenAI: GPT Luna Latest', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.1, + output: 0.5, + cacheRead: 0.01, + cacheWrite: 0.125, + tiers: [ + { + inputTokensAbove: 272000, + input: 0.2, + output: 0.75, + cacheRead: 0.02, + cacheWrite: 0.25, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: '~openai/gpt-mini-latest', + name: 'OpenAI: GPT Mini Latest', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.75, output: 4.5, cacheRead: 0.075 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: '~openai/gpt-sol-latest', + name: 'OpenAI: GPT Sol Latest', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.1, + cacheWrite: 2.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 4, + output: 15, + cacheRead: 0.2, + cacheWrite: 5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: '~openai/gpt-terra-latest', + name: 'OpenAI: GPT Terra Latest', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 12, + cacheRead: 0.2, + cacheWrite: 2.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 4, + output: 18, + cacheRead: 0.4, + cacheWrite: 5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: '~unbiased/pareto-latest', + name: 'Pareto Latest', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.8, output: 3.2, cacheRead: 0.03 }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: '~x-ai/grok-latest', + name: 'xAI: Grok Latest', + input: ['text', 'image', 'document'], + reasoning: { + levels: { xhigh: 'xhigh', high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 6, + cacheRead: 0.5, + tiers: [{ inputTokensAbove: 200000, input: 4, output: 12, cacheRead: 1 }], + }, + contextWindow: 500000, + maxOutputTokens: 450000, + }, + { + id: '~z-ai/glm-flash-latest', + name: 'Z.ai: GLM Flash Latest', + input: ['text', 'image', 'video'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.0413, output: 0.0758, cacheRead: 0.03 }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: '~z-ai/glm-latest', + name: 'Z.ai: GLM Latest', + input: ['text'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.0699, output: 1.4, cacheRead: 0.0689 }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: 'aion-labs/aion-2.0', + name: 'AionLabs: Aion-2.0', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.8, output: 1.6, cacheRead: 0.2 }, + contextWindow: 131072, + maxOutputTokens: 32768, + }, + { + id: 'aion-labs/aion-3.0', + name: 'AionLabs: Aion-3.0', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 3, output: 6, cacheRead: 0.75 }, + contextWindow: 131072, + maxOutputTokens: 32768, + }, + { + id: 'aion-labs/aion-3.0-mini', + name: 'AionLabs: Aion-3.0-Mini', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.7, output: 1.4, cacheRead: 0.18 }, + contextWindow: 131072, + maxOutputTokens: 32768, + }, + { + id: 'aion-labs/aion-3.5', + name: 'AionLabs: Aion 3.5', + input: ['text'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 3, output: 6, cacheRead: 0.75 }, + contextWindow: 262144, + maxOutputTokens: 32768, + }, + { + id: 'aion-labs/aion-3.5-mini', + name: 'AionLabs: Aion 3.5 Mini', + input: ['text'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.7, output: 1.4, cacheRead: 0.18 }, + contextWindow: 262144, + maxOutputTokens: 32768, + }, + { + id: 'aion-labs/aion-rp-llama-3.1-8b', + name: 'AionLabs: Aion-RP 1.0 (8B)', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.8, output: 1.6 }, + contextWindow: 32768, + maxOutputTokens: 29491, + }, + { + id: 'amazon/nova-2-lite-v1', + name: 'Amazon: Nova 2 Lite', + input: ['text', 'image', 'video', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.3, output: 2.5 }, + contextWindow: 1000000, + maxOutputTokens: 65535, + }, + { + id: 'amazon/nova-lite-v1', + name: 'Amazon: Nova Lite 1.0', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.06, output: 0.24 }, + contextWindow: 300000, + maxOutputTokens: 5120, + }, + { + id: 'amazon/nova-micro-v1', + name: 'Amazon: Nova Micro 1.0', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.035, output: 0.14 }, + contextWindow: 128000, + maxOutputTokens: 5120, + }, + { + id: 'amazon/nova-premier-v1', + name: 'Amazon: Nova Premier 1.0', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 2.5, output: 12.5, cacheRead: 0.625 }, + contextWindow: 1000000, + maxOutputTokens: 32000, + }, + { + id: 'amazon/nova-pro-v1', + name: 'Amazon: Nova Pro 1.0', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.8, output: 3.2 }, + contextWindow: 300000, + maxOutputTokens: 5120, + }, + { + id: 'anthracite-org/magnum-v4-72b', + name: 'Magnum v4 72B', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 2.5, output: 5 }, + contextWindow: 32768, + maxOutputTokens: 4096, + }, + { + id: 'anthropic/claude-fable-5', + name: 'Anthropic: Claude Fable 5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 1, + cacheWrite: 12.5, + cacheWrite1h: 20, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-fable-5:batch', + name: 'Anthropic: Claude Fable 5 (batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + cacheWrite1h: 10, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-fable-5.1', + name: 'Anthropic: Claude Fable 5.1', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 0.25, + cacheWrite: 12.5, + cacheWrite1h: 20, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-fable-5.1:batch', + name: 'Anthropic: Claude Fable 5.1 (batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.125, + cacheWrite: 6.25, + cacheWrite1h: 10, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-haiku-4.5', + name: 'Anthropic: Claude Haiku 4.5', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 1, + output: 5, + cacheRead: 0.1, + cacheWrite: 1.25, + cacheWrite1h: 2, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'anthropic/claude-haiku-4.5:batch', + name: 'Anthropic: Claude Haiku 4.5 (batch)', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 0.5, + output: 2.5, + cacheRead: 0.05, + cacheWrite: 0.625, + cacheWrite1h: 1, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'anthropic/claude-haiku-5.5', + name: 'Anthropic: Claude Haiku 5.5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.1, + output: 0.5, + cacheRead: 0.01, + cacheWrite: 0.125, + cacheWrite1h: 0.2, + tiers: [ + { + inputTokensAbove: 100000, + input: 0.5, + output: 2.5, + cacheRead: 0.05, + cacheWrite: 0.625, + cacheWrite1h: 1, + }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-haiku-5.5:batch', + name: 'Anthropic: Claude Haiku 5.5 (batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.05, + output: 0.25, + cacheRead: 0.005, + cacheWrite: 0.0625, + cacheWrite1h: 0.1, + tiers: [ + { + inputTokensAbove: 100000, + input: 0.25, + output: 1.25, + cacheRead: 0.025, + cacheWrite: 0.3125, + cacheWrite1h: 0.5, + }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-4.1', + name: 'Anthropic: Claude Opus 4.1', + input: ['image', 'text', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 15, + output: 75, + cacheRead: 1.5, + cacheWrite: 18.75, + cacheWrite1h: 30, + }, + contextWindow: 200000, + maxOutputTokens: 32000, + }, + { + id: 'anthropic/claude-opus-4.1:batch', + name: 'Anthropic: Claude Opus 4.1 (batch)', + input: ['image', 'text', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 7.5, + output: 37.5, + cacheRead: 0.75, + cacheWrite: 9.375, + cacheWrite1h: 15, + }, + contextWindow: 200000, + maxOutputTokens: 32000, + }, + { + id: 'anthropic/claude-opus-4.5', + name: 'Anthropic: Claude Opus 4.5', + input: ['document', 'image', 'text'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + cacheWrite1h: 10, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'anthropic/claude-opus-4.5:batch', + name: 'Anthropic: Claude Opus 4.5 (batch)', + input: ['document', 'image', 'text'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 2.5, + output: 12.5, + cacheRead: 0.25, + cacheWrite: 3.125, + cacheWrite1h: 5, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'anthropic/claude-opus-4.6', + name: 'Anthropic: Claude Opus 4.6', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + cacheWrite1h: 10, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-4.6:batch', + name: 'Anthropic: Claude Opus 4.6 (batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.5, + output: 12.5, + cacheRead: 0.25, + cacheWrite: 3.125, + cacheWrite1h: 5, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-4.7', + name: 'Anthropic: Claude Opus 4.7', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + cacheWrite1h: 10, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-4.7:batch', + name: 'Anthropic: Claude Opus 4.7 (batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.5, + output: 12.5, + cacheRead: 0.25, + cacheWrite: 3.125, + cacheWrite1h: 5, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-4.8', + name: 'Anthropic: Claude Opus 4.8', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + cacheWrite1h: 10, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-4.8:batch', + name: 'Anthropic: Claude Opus 4.8 (batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.5, + output: 12.5, + cacheRead: 0.25, + cacheWrite: 3.125, + cacheWrite1h: 5, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-5', + name: 'Anthropic: Claude Opus 5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + cacheWrite1h: 10, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-5:batch', + name: 'Anthropic: Claude Opus 5 (batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.5, + output: 12.5, + cacheRead: 0.25, + cacheWrite: 3.125, + cacheWrite1h: 5, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-5.5', + name: 'Anthropic: Claude Opus 5.5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 4, + output: 20, + cacheRead: 0.2, + cacheWrite: 5, + cacheWrite1h: 8, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-5.5:batch', + name: 'Anthropic: Claude Opus 5.5 (batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.1, + cacheWrite: 2.5, + cacheWrite1h: 4, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-sonnet-4.5', + name: 'Anthropic: Claude Sonnet 4.5', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + cacheWrite1h: 6, + tiers: [ + { + inputTokensAbove: 200000, + input: 6, + output: 22.5, + cacheRead: 0.6, + cacheWrite: 7.5, + cacheWrite1h: 12, + }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'anthropic/claude-sonnet-4.5:batch', + name: 'Anthropic: Claude Sonnet 4.5 (batch)', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 1.5, + output: 7.5, + cacheRead: 0.15, + cacheWrite: 1.875, + cacheWrite1h: 3, + tiers: [ + { + inputTokensAbove: 200000, + input: 3, + output: 11.25, + cacheRead: 0.3, + cacheWrite: 3.75, + cacheWrite1h: 6, + }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'anthropic/claude-sonnet-4.6', + name: 'Anthropic: Claude Sonnet 4.6', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + cacheWrite1h: 6, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-sonnet-4.6:batch', + name: 'Anthropic: Claude Sonnet 4.6 (batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1.5, + output: 7.5, + cacheRead: 0.15, + cacheWrite: 1.875, + cacheWrite1h: 3, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-sonnet-5', + name: 'Anthropic: Claude Sonnet 5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.2, + cacheWrite: 2.5, + cacheWrite1h: 4, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-sonnet-5:batch', + name: 'Anthropic: Claude Sonnet 5 (batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 5, + cacheRead: 0.1, + cacheWrite: 1.25, + cacheWrite1h: 2, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-sonnet-5.5', + name: 'Anthropic: Claude Sonnet 5.5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.1, + cacheWrite: 2.5, + cacheWrite1h: 4, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-sonnet-5.5:batch', + name: 'Anthropic: Claude Sonnet 5.5 (batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 5, + cacheRead: 0.05, + cacheWrite: 1.25, + cacheWrite1h: 2, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'arcee-ai/trinity-large-thinking', + name: 'Arcee AI: Trinity Large Thinking', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.25, output: 0.8, cacheRead: 0.06 }, + contextWindow: 262144, + maxOutputTokens: 80000, + }, + { + id: 'bytedance-seed/seed-1.6', + name: 'ByteDance Seed: Seed 1.6', + input: ['image', 'text', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 0.25, + output: 2, + tiers: [{ inputTokensAbove: 128000, input: 0.5, output: 4 }], + }, + contextWindow: 262144, + maxOutputTokens: 32768, + }, + { + id: 'bytedance-seed/seed-1.6-flash', + name: 'ByteDance Seed: Seed 1.6 Flash', + input: ['image', 'text', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 0.075, + output: 0.3, + tiers: [{ inputTokensAbove: 128000, input: 0.1, output: 0.8 }], + }, + contextWindow: 262144, + maxOutputTokens: 32768, + }, + { + id: 'bytedance-seed/seed-2-1-turbo', + name: 'ByteDance Seed: Seed 2.1 Turbo', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.5, output: 2.5 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'bytedance-seed/seed-2.0-code', + name: 'ByteDance Seed: Seed-2.0-Code', + input: ['text', 'image', 'video'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low', off: 'none' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.5, + output: 3, + tiers: [{ inputTokensAbove: 128000, input: 1, output: 6 }], + }, + contextWindow: 262144, + maxOutputTokens: 131072, + }, + { + id: 'bytedance-seed/seed-2.0-lite', + name: 'ByteDance Seed: Seed-2.0-Lite', + input: ['text', 'image', 'video'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.25, + output: 2, + tiers: [{ inputTokensAbove: 128000, input: 0.5, output: 4 }], + }, + contextWindow: 262144, + maxOutputTokens: 131072, + }, + { + id: 'bytedance-seed/seed-2.0-mini', + name: 'ByteDance Seed: Seed-2.0-Mini', + input: ['text', 'image', 'video'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.1, + output: 0.4, + tiers: [{ inputTokensAbove: 128000, input: 0.2, output: 0.8 }], + }, + contextWindow: 262144, + maxOutputTokens: 131072, + }, + { + id: 'bytedance/ui-tars-1.5-7b', + name: 'ByteDance: UI-TARS 7B ', + input: ['image', 'text'], + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.2, cacheRead: 0.1 }, + contextWindow: 128000, + maxOutputTokens: 2048, + }, + { + id: 'cognitivecomputations/dolphin-mistral-24b-venice-edition', + name: 'Venice: Uncensored', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.2, output: 0.9 }, + contextWindow: 128000, + maxOutputTokens: 8192, + }, + { + id: 'cohere/command-a', + name: 'Cohere: Command A', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 2.5, output: 10 }, + contextWindow: 256000, + maxOutputTokens: 8192, + }, + { + id: 'cohere/command-a-plus', + name: 'Cohere: Command A+', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.3, output: 1.5, cacheRead: 0.15 }, + contextWindow: 192000, + maxOutputTokens: 64000, + }, + { + id: 'cohere/command-r-08-2024', + name: 'Cohere: Command R (08-2024)', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.6 }, + contextWindow: 128000, + maxOutputTokens: 4000, + }, + { + id: 'cohere/command-r-plus-08-2024', + name: 'Cohere: Command R+ (08-2024)', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 2.5, output: 10 }, + contextWindow: 128000, + maxOutputTokens: 4000, + }, + { + id: 'cohere/command-r7b-12-2024', + name: 'Cohere: Command R7B (12-2024)', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.0375, output: 0.15 }, + contextWindow: 128000, + maxOutputTokens: 4000, + }, + { + id: 'cohere/north-mini-code:free', + name: 'Cohere: North Mini Code (free)', + input: ['text'], + reasoning: { levels: {}, budget: false }, + contextWindow: 256000, + maxOutputTokens: 64000, + }, + { + id: 'deepseek/deepseek-chat', + name: 'DeepSeek: DeepSeek V3', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.2574, output: 1.0287 }, + contextWindow: 163840, + maxOutputTokens: 16000, + }, + { + id: 'deepseek/deepseek-chat-v3-0324', + name: 'DeepSeek: DeepSeek V3 0324', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.29, output: 1.14, cacheRead: 0.11 }, + contextWindow: 163840, + maxOutputTokens: 115200, + }, + { + id: 'deepseek/deepseek-chat-v3.1', + name: 'DeepSeek: DeepSeek V3.1', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.25, output: 0.95, cacheRead: 0.13 }, + contextWindow: 163840, + maxOutputTokens: 32768, + }, + { + id: 'deepseek/deepseek-r1-0528', + name: 'DeepSeek: R1 0528', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.5, output: 2.15, cacheRead: 0.35 }, + contextWindow: 163840, + maxOutputTokens: 32768, + }, + { + id: 'deepseek/deepseek-v3.1-terminus', + name: 'DeepSeek: DeepSeek V3.1 Terminus', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.27, output: 1 }, + contextWindow: 163840, + maxOutputTokens: 147456, + }, + { + id: 'deepseek/deepseek-v3.2', + name: 'DeepSeek: DeepSeek V3.2', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.28, output: 0.42, cacheRead: 0.028 }, + contextWindow: 163840, + maxOutputTokens: 65536, + }, + { + id: 'deepseek/deepseek-v3.2-exp', + name: 'DeepSeek: DeepSeek V3.2 Exp', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.27, output: 0.41 }, + contextWindow: 163840, + maxOutputTokens: 147456, + }, + { + id: 'deepseek/deepseek-v4-flash', + name: 'DeepSeek: DeepSeek V4 Flash 0423', + input: ['text'], + reasoning: { + levels: { xhigh: 'xhigh', high: 'high', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.091, output: 0.182, cacheRead: 0.0182 }, + contextWindow: 1048576, + maxOutputTokens: 943717, + }, + { + id: 'deepseek/deepseek-v4-flash-0731', + name: 'DeepSeek: DeepSeek V4 Flash 0731', + input: ['text'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.44, output: 1.32, cacheRead: 0.014 }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: 'deepseek/deepseek-v4-flash-vision-exp', + name: 'DeepSeek: DeepSeek V4 Flash Vision Exp', + input: ['text', 'image'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low', off: 'none' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.2156, + output: 0.6468, + cacheRead: 0.00686, + }, + contextWindow: 1048576, + maxOutputTokens: 262144, + }, + { + id: 'deepseek/deepseek-v4-pro', + name: 'DeepSeek: DeepSeek V4 Pro 0423', + input: ['text'], + reasoning: { + levels: { xhigh: 'xhigh', high: 'high', off: 'none' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.95526, + output: 1.91052, + cacheRead: 0.079605, + }, + contextWindow: 1048576, + maxOutputTokens: 384000, + }, + { + id: 'deepseek/deepseek-v4-pro-0813', + name: 'DeepSeek: DeepSeek V4 Pro 0813', + input: ['text'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.66, output: 1.98, cacheRead: 0.022 }, + contextWindow: 1048576, + maxOutputTokens: 393216, + }, + { + id: 'deepseek/deepseek-v4.1-flash', + name: 'DeepSeek: DeepSeek V4.1 Flash', + input: ['text', 'image'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.02, output: 1, cacheRead: 0.015 }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: 'deepseek/deepseek-v4.1-flash-1017', + name: 'DeepSeek: DeepSeek V4.1 Flash 1017', + input: ['text', 'image'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.15, output: 0.6, cacheRead: 0.003 }, + contextWindow: 1048576, + maxOutputTokens: 393216, + }, + { + id: 'deepseek/deepseek-v4.1-flash:batch', + name: 'DeepSeek: DeepSeek V4.1 Flash (batch)', + input: ['text', 'image'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.05, output: 0.15, cacheRead: 0.004 }, + contextWindow: 1048576, + maxOutputTokens: 384000, + }, + { + id: 'dots-studio/dots-3-note-preview:free', + name: 'Dots Studio: Dots3-Note Preview (free)', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + contextWindow: 512000, + maxOutputTokens: 460800, + }, + { + id: 'elorian/glimpse', + name: 'Elorian: Glimpse', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.6, output: 3, cacheRead: 0.06 }, + contextWindow: 262144, + maxOutputTokens: 256000, + }, + { + id: 'fireworks/ember-1', + name: 'Fireworks: Ember-1', + input: ['text', 'image'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 3, output: 15, cacheRead: 0.3 }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: 'google/gemini-2.5-flash', + name: 'Google: Gemini 2.5 Flash', + input: ['document', 'image', 'text', 'audio', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 0.3, + output: 2.5, + cacheRead: 0.03, + cacheWrite: 0.083333, + }, + contextWindow: 1048576, + maxOutputTokens: 65535, + }, + { + id: 'google/gemini-2.5-flash-image', + name: 'Google: Nano Banana (Gemini 2.5 Flash Image)', + input: ['image', 'text'], + reasoning: false, + prices: { + currency: 'USD', + input: 0.3, + output: 2.5, + cacheRead: 0.03, + cacheWrite: 0.083333, + }, + contextWindow: 32768, + maxOutputTokens: 8192, + }, + { + id: 'google/gemini-2.5-flash-lite', + name: 'Google: Gemini 2.5 Flash Lite', + input: ['text', 'image', 'document', 'audio', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 0.1, + output: 0.4, + cacheRead: 0.01, + cacheWrite: 0.083333, + }, + contextWindow: 1048576, + maxOutputTokens: 65535, + }, + { + id: 'google/gemini-2.5-pro', + name: 'Google: Gemini 2.5 Pro', + input: ['text', 'image', 'document', 'audio', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 1.25, + output: 10, + cacheRead: 0.125, + cacheWrite: 0.375, + tiers: [ + { + inputTokensAbove: 200000, + input: 2.5, + output: 15, + cacheRead: 0.25, + cacheWrite: 0.375, + }, + ], + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-2.5-pro-preview', + name: 'Google: Gemini 2.5 Pro Preview 06-05', + input: ['document', 'image', 'text', 'audio'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 1.25, + output: 10, + cacheRead: 0.125, + cacheWrite: 0.375, + tiers: [ + { + inputTokensAbove: 200000, + input: 2.5, + output: 15, + cacheRead: 0.25, + cacheWrite: 0.375, + }, + ], + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3-flash-preview', + name: 'Google: Gemini 3 Flash Preview', + input: ['text', 'image', 'document', 'audio', 'video'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.5, + output: 3, + cacheRead: 0.05, + cacheWrite: 0.083333, + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3-flash-preview:batch', + name: 'Google: Gemini 3 Flash Preview (batch)', + input: ['text', 'image', 'document', 'audio', 'video'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + off: 'none', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.25, output: 1.5 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3-pro-image', + name: 'Google: Nano Banana Pro (Gemini 3 Pro Image)', + input: ['image', 'text'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 2, + output: 12, + cacheRead: 0.2, + cacheWrite: 0.375, + }, + contextWindow: 131072, + maxOutputTokens: 32768, + }, + { + id: 'google/gemini-3-pro-image-preview', + name: 'Google: Nano Banana Pro (Gemini 3 Pro Image Preview)', + input: ['image', 'text'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 2, + output: 12, + cacheRead: 0.2, + cacheWrite: 0.375, + }, + contextWindow: 65536, + maxOutputTokens: 32768, + }, + { + id: 'google/gemini-3.1-flash-image', + name: 'Google: Nano Banana 2 (Gemini 3.1 Flash Image)', + input: ['image', 'text'], + reasoning: { + levels: { high: 'high', minimal: 'minimal', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.5, output: 3 }, + contextWindow: 131072, + maxOutputTokens: 32768, + }, + { + id: 'google/gemini-3.1-flash-image-preview', + name: 'Google: Nano Banana 2 (Gemini 3.1 Flash Image Preview)', + input: ['image', 'text'], + reasoning: { + levels: { high: 'high', minimal: 'minimal', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.5, output: 3 }, + contextWindow: 65536, + maxOutputTokens: 58982, + }, + { + id: 'google/gemini-3.1-flash-lite', + name: 'Google: Gemini 3.1 Flash Lite', + input: ['text', 'image', 'video', 'document', 'audio'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.25, + output: 1.5, + cacheRead: 0.025, + cacheWrite: 0.083333, + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.1-flash-lite-image', + name: 'Google: Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image)', + input: ['image', 'text'], + reasoning: { + levels: { high: 'high', minimal: 'minimal', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.25, output: 1.5 }, + contextWindow: 65536, + maxOutputTokens: 58982, + }, + { + id: 'google/gemini-3.1-flash-lite-preview', + name: 'Google: Gemini 3.1 Flash Lite Preview', + input: ['text', 'image', 'video', 'document', 'audio'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.25, + output: 1.5, + cacheRead: 0.025, + cacheWrite: 0.083333, + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.1-flash-lite:batch', + name: 'Google: Gemini 3.1 Flash Lite (batch)', + input: ['text', 'image', 'video', 'document', 'audio'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + off: 'none', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.125, output: 0.75, cacheRead: 0.0125 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.1-pro-preview', + name: 'Google: Gemini 3.1 Pro Preview', + input: ['audio', 'document', 'image', 'text', 'video'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 12, + cacheRead: 0.2, + cacheWrite: 0.375, + tiers: [ + { + inputTokensAbove: 200000, + input: 4, + output: 18, + cacheRead: 0.4, + cacheWrite: 0.375, + }, + ], + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.1-pro-preview-customtools', + name: 'Google: Gemini 3.1 Pro Preview Custom Tools', + input: ['text', 'audio', 'image', 'video', 'document'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 12, + cacheRead: 0.2, + cacheWrite: 0.375, + tiers: [ + { + inputTokensAbove: 200000, + input: 4, + output: 18, + cacheRead: 0.4, + cacheWrite: 0.375, + }, + ], + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.1-pro-preview:batch', + name: 'Google: Gemini 3.1 Pro Preview (batch)', + input: ['audio', 'document', 'image', 'text', 'video'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 6, + tiers: [{ inputTokensAbove: 200000, input: 2, output: 9 }], + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.5-flash', + name: 'Google: Gemini 3.5 Flash', + input: ['text', 'image', 'video', 'document', 'audio'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1.5, + output: 9, + cacheRead: 0.15, + cacheWrite: 0.083333, + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.5-flash-lite', + name: 'Google: Gemini 3.5 Flash Lite', + input: ['text', 'image', 'video', 'document', 'audio'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.3, + output: 2.5, + cacheRead: 0.03, + cacheWrite: 0.083333, + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.5-flash-lite:batch', + name: 'Google: Gemini 3.5 Flash Lite (batch)', + input: ['text', 'image', 'video', 'document', 'audio'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.15, output: 1.25, cacheRead: 0.015 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.5-flash:batch', + name: 'Google: Gemini 3.5 Flash (batch)', + input: ['text', 'image', 'video', 'document', 'audio'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.75, output: 4.5, cacheRead: 0.075 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.6-flash', + name: 'Google: Gemini 3.6 Flash', + input: ['text', 'image', 'video', 'document', 'audio'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.75, + output: 3.75, + cacheRead: 0.075, + cacheWrite: 0.041667, + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.6-flash:batch', + name: 'Google: Gemini 3.6 Flash (batch)', + input: ['text', 'image', 'video', 'document', 'audio'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.375, + output: 1.875, + cacheRead: 0.0375, + cacheWrite: 0.041667, + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.7-flash', + name: 'Google: Gemini 3.7 Flash', + input: ['text', 'image', 'video', 'document', 'audio'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.75, + output: 3.75, + cacheRead: 0.075, + cacheWrite: 0.041667, + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.7-flash:batch', + name: 'Google: Gemini 3.7 Flash (batch)', + input: ['text', 'image', 'video', 'document', 'audio'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.375, + output: 1.875, + cacheRead: 0.0375, + cacheWrite: 0.041667, + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.8-flash', + name: 'Google: Gemini 3.8 Flash', + input: ['text', 'image', 'video', 'document', 'audio'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.825, + output: 4.125, + cacheRead: 0.0825, + cacheWrite: 0.041667, + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-3.8-flash:batch', + name: 'Google: Gemini 3.8 Flash (batch)', + input: ['text', 'image', 'video', 'document', 'audio'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.375, + output: 1.875, + cacheRead: 0.0375, + cacheWrite: 0.041667, + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/gemini-4-argon', + name: 'Google: Gemini 4 Argon', + input: ['audio', 'document', 'image', 'text', 'video'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.1, + cacheWrite: 0.1875, + }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: 'google/gemini-4-argon:batch', + name: 'Google: Gemini 4 Argon (batch)', + input: ['audio', 'document', 'image', 'text', 'video'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 5, + cacheRead: 0.05, + cacheWrite: 0.1875, + }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: 'google/gemini-nano-banana-2.1', + name: 'Google: Nano Banana 2.1', + input: ['image', 'text'], + reasoning: { + levels: { high: 'high', minimal: 'minimal', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.5, output: 7.5 }, + contextWindow: 65536, + maxOutputTokens: 58982, + }, + { + id: 'google/gemma-2-27b-it', + name: 'Google: Gemma 2 27B', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.65, output: 0.65 }, + contextWindow: 8192, + maxOutputTokens: 2048, + }, + { + id: 'google/gemma-3-12b-it', + name: 'Google: Gemma 3 12B', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.05, output: 0.15 }, + contextWindow: 131072, + maxOutputTokens: 16384, + }, + { + id: 'google/gemma-3-27b-it', + name: 'Google: Gemma 3 27B', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.08, output: 0.35, cacheRead: 0.04 }, + contextWindow: 131072, + maxOutputTokens: 117964, + }, + { + id: 'google/gemma-3-4b-it', + name: 'Google: Gemma 3 4B', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.04, output: 0.05, cacheRead: 0.02 }, + contextWindow: 131072, + maxOutputTokens: 117964, + }, + { + id: 'google/gemma-4-26b-a4b-it', + name: 'Google: Gemma 4 26B A4B ', + input: ['image', 'text', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 0.0675, + output: 0.225, + cacheRead: 0.0375, + }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'google/gemma-4-26b-a4b-it:free', + name: 'Google: Gemma 4 26B A4B (free)', + input: ['image', 'text', 'video'], + reasoning: { levels: {}, budget: false }, + contextWindow: 262144, + maxOutputTokens: 32768, + }, + { + id: 'google/gemma-4-31b-it', + name: 'Google: Gemma 4 31B', + input: ['image', 'text', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.1, output: 0.34, cacheRead: 0.1 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'google/gemma-4-31b-it:free', + name: 'Google: Gemma 4 31B (free)', + input: ['image', 'text', 'video'], + reasoning: { levels: {}, budget: false }, + contextWindow: 262144, + maxOutputTokens: 32768, + }, + { + id: 'google/lyria-3-clip-preview', + name: 'Google: Lyria 3 Clip Preview', + input: ['text', 'image'], + reasoning: false, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'google/lyria-3-pro-preview', + name: 'Google: Lyria 3 Pro Preview', + input: ['text', 'image'], + reasoning: false, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gryphe/mythomax-l2-13b', + name: 'MythoMax 13B', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.08, output: 0.11 }, + contextWindow: 8192, + maxOutputTokens: 3686, + }, + { + id: 'ibm-granite/granite-4.0-h-micro', + name: 'IBM: Granite 4.0 Micro', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.017, output: 0.112 }, + contextWindow: 131000, + maxOutputTokens: 117900, + }, + { + id: 'ibm-granite/granite-4.2-8b', + name: 'IBM: Granite 4.2 8B', + input: ['text'], + reasoning: { + levels: { high: 'high', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.06, output: 0.25, cacheRead: 0.015 }, + contextWindow: 131072, + maxOutputTokens: 117964, + }, + { + id: 'inception/mercury-2', + name: 'Inception: Mercury 2', + input: ['text'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.25, output: 0.75, cacheRead: 0.025 }, + contextWindow: 128000, + maxOutputTokens: 50000, + }, + { + id: 'inception/mercury-2.5', + name: 'Inception: Mercury 2.5', + input: ['text'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.04, output: 0.15, cacheRead: 0.004 }, + contextWindow: 260000, + maxOutputTokens: 65536, + }, + { + id: 'inception/mercury-3', + name: 'Inception: Mercury 3', + input: ['text'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.1, output: 0.35, cacheRead: 0.01 }, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'inclusionai/ling-3.0-flash', + name: 'inclusionAI: Ling 3.0 Flash', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.021, output: 0.063, cacheRead: 0.0042 }, + contextWindow: 262144, + maxOutputTokens: 32768, + }, + { + id: 'inclusionai/ling-3.0-flash-vl', + name: 'inclusionAI: Ling 3.0 Flash VL', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.06, output: 0.18, cacheRead: 0.012 }, + contextWindow: 131072, + maxOutputTokens: 32768, + }, + { + id: 'inclusionai/ling-3.1-flash', + name: 'inclusionAI: Ling 3.1 Flash', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.075, output: 0.225, cacheRead: 0.015 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'inference-net/schematron-v2-small', + name: 'Inference.net: Schematron V2 Small', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.05, output: 0.23, cacheRead: 0.05 }, + contextWindow: 128000, + maxOutputTokens: 4096, + }, + { + id: 'inference-net/schematron-v2-turbo', + name: 'Inference.net: Schematron V2 Turbo', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.03, output: 0.15, cacheRead: 0.03 }, + contextWindow: 128000, + maxOutputTokens: 8192, + }, + { + id: 'liquid/lfm-2.5-2.6b', + name: 'LiquidAI: LFM2.5-2.6B', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.35, output: 0.5, cacheRead: 0.04 }, + contextWindow: 128000, + maxOutputTokens: 8192, + }, + { + id: 'liquid/lfm-2.5-2.6b:free', + name: 'LiquidAI: LFM2.5-2.6B (free)', + input: ['text'], + reasoning: { levels: {}, budget: false }, + contextWindow: 65536, + maxOutputTokens: 8192, + }, + { + id: 'liquid/lfm-2.5-24b-a2b', + name: 'LiquidAI: LFM2.5-24B-A2B', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.05, output: 0.7, cacheRead: 0.025 }, + contextWindow: 128000, + maxOutputTokens: 8192, + }, + { + id: 'mancer/weaver', + name: 'Mancer: Weaver (alpha)', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.4, output: 0.75 }, + contextWindow: 8000, + maxOutputTokens: 6000, + }, + { + id: 'meituan/longcat-2.0', + name: 'Meituan: LongCat 2.0', + input: ['text'], + reasoning: { levels: {}, budget: true }, + prices: { currency: 'USD', input: 0.3, output: 1.2, cacheRead: 0.006 }, + contextWindow: 1048756, + maxOutputTokens: 262144, + }, + { + id: 'meta-llama/llama-3.1-70b-instruct', + name: 'Meta: Llama 3.1 70B Instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.4, output: 0.4 }, + contextWindow: 131072, + maxOutputTokens: 16384, + }, + { + id: 'meta-llama/llama-3.1-8b-instruct', + name: 'Meta: Llama 3.1 8B Instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.05, output: 0.08, cacheRead: 0.025 }, + contextWindow: 131072, + maxOutputTokens: 117964, + }, + { + id: 'meta-llama/llama-3.2-1b-instruct', + name: 'Meta: Llama 3.2 1B Instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.027, output: 0.201 }, + contextWindow: 60000, + maxOutputTokens: 54000, + }, + { + id: 'meta-llama/llama-3.2-3b-instruct', + name: 'Meta: Llama 3.2 3B Instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.05, output: 0.33 }, + contextWindow: 131072, + maxOutputTokens: 117964, + }, + { + id: 'meta-llama/llama-3.3-70b-instruct', + name: 'Meta: Llama 3.3 70B Instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.32 }, + contextWindow: 131072, + maxOutputTokens: 16384, + }, + { + id: 'meta-llama/llama-4-maverick', + name: 'Meta: Llama 4 Maverick', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.1875, output: 0.6525, cacheRead: 0.05 }, + contextWindow: 524288, + maxOutputTokens: 16384, + }, + { + id: 'meta-llama/llama-4-scout', + name: 'Meta: Llama 4 Scout', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.3 }, + contextWindow: 1310720, + maxOutputTokens: 16384, + }, + { + id: 'meta-llama/llama-guard-4-12b', + name: 'Meta: Llama Guard 4 12B', + input: ['image', 'text'], + reasoning: false, + prices: { currency: 'USD', input: 0.18, output: 0.18 }, + contextWindow: 163840, + maxOutputTokens: 16384, + }, + { + id: 'meta/muse-glimmer-30b', + name: 'Meta: Muse Glimmer 30B', + input: ['text', 'image'], + reasoning: { + levels: { xhigh: 'xhigh', high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.3, output: 1.2, cacheRead: 0.04 }, + contextWindow: 131072, + maxOutputTokens: 16384, + }, + { + id: 'meta/muse-spark-1.1', + name: 'Meta: Muse Spark 1.1', + input: ['text', 'image', 'video', 'document'], + reasoning: { + levels: { + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 4.25, cacheRead: 0.15 }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: 'meta/muse-spark-1.2', + name: 'Meta: Muse Spark 1.2', + input: ['text', 'image', 'video', 'document'], + reasoning: { + levels: { + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 4.25, cacheRead: 0.15 }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: 'meta/muse-spark-1.2-contributor', + name: 'Meta: Muse Spark 1.2 Contributor', + input: ['text', 'image', 'video', 'document'], + reasoning: { + levels: { + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.1, output: 0.2, cacheRead: 0.002 }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: 'meta/muse-spark-1.3', + name: 'Meta: Muse Spark 1.3', + input: ['text', 'image', 'video', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 4.25, cacheRead: 0.15 }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: 'meta/muse-spark-1.3-contributor', + name: 'Meta: Muse Spark 1.3 Contributor', + input: ['text', 'image', 'video', 'document'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.1, output: 0.2, cacheRead: 0.002 }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: 'meta/muse-spark-open', + name: 'Meta: Muse Spark Open', + input: ['text', 'image', 'video', 'document', 'audio'], + reasoning: { + levels: { xhigh: 'xhigh', high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 4.25, cacheRead: 0.15 }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: 'meta/muse-wonder', + name: 'Meta: Muse Wonder', + input: ['text', 'image', 'video', 'document', 'audio'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { currency: 'USD', input: 4, output: 20, cacheRead: 0.2 }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: 'microsoft/phi-4', + name: 'Microsoft: Phi 4', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.07, output: 0.14 }, + contextWindow: 16384, + maxOutputTokens: 14745, + }, + { + id: 'minimax/minimax-01', + name: 'MiniMax: MiniMax-01', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.2, output: 1.1 }, + contextWindow: 1000192, + maxOutputTokens: 900172, + }, + { + id: 'minimax/minimax-m1', + name: 'MiniMax: MiniMax M1', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.55, output: 2.2 }, + contextWindow: 1000000, + maxOutputTokens: 40000, + }, + { + id: 'minimax/minimax-m2', + name: 'MiniMax: MiniMax M2', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.255, output: 1.02 }, + contextWindow: 204800, + maxOutputTokens: 131072, + }, + { + id: 'minimax/minimax-m2-her', + name: 'MiniMax: MiniMax M2-her', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.3, output: 1.2, cacheRead: 0.03 }, + contextWindow: 65536, + maxOutputTokens: 2048, + }, + { + id: 'minimax/minimax-m2.1', + name: 'MiniMax: MiniMax M2.1', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.3, output: 1.2, cacheRead: 0.03 }, + contextWindow: 204800, + maxOutputTokens: 131072, + }, + { + id: 'minimax/minimax-m2.5', + name: 'MiniMax: MiniMax M2.5', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.3, output: 1.2, cacheRead: 0.03 }, + contextWindow: 204800, + maxOutputTokens: 131072, + }, + { + id: 'minimax/minimax-m2.7', + name: 'MiniMax: MiniMax M2.7', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.3, output: 1.2, cacheRead: 0.06 }, + contextWindow: 204800, + maxOutputTokens: 131072, + }, + { + id: 'minimax/minimax-m3', + name: 'MiniMax: MiniMax M3', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.3, output: 1.2, cacheRead: 0.06 }, + contextWindow: 1048576, + maxOutputTokens: 512000, + }, + { + id: 'minimax/minimax-m3.1-flash', + name: 'MiniMax: MiniMax M3.1 Flash', + input: ['text', 'image', 'video'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.15, output: 0.6, cacheRead: 0.015 }, + contextWindow: 1048576, + maxOutputTokens: 524288, + }, + { + id: 'mistralai/codestral-2508', + name: 'Mistral: Codestral 2508', + input: ['text', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.3, output: 0.9, cacheRead: 0.03 }, + contextWindow: 256000, + maxOutputTokens: 204800, + }, + { + id: 'mistralai/codestral-2508:batch', + name: 'Mistral: Codestral 2508 (batch)', + input: ['text', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.45, cacheRead: 0.015 }, + contextWindow: 256000, + maxOutputTokens: 204800, + }, + { + id: 'mistralai/devstral-2512', + name: 'Mistral: Devstral 2 2512', + input: ['text', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.4, output: 2, cacheRead: 0.04 }, + contextWindow: 262144, + maxOutputTokens: 209715, + }, + { + id: 'mistralai/ministral-14b-2512', + name: 'Mistral: Ministral 3 14B 2512', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.2, output: 0.2, cacheRead: 0.02 }, + contextWindow: 262144, + maxOutputTokens: 209715, + }, + { + id: 'mistralai/ministral-3b-2512', + name: 'Mistral: Ministral 3 3B 2512', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.1, cacheRead: 0.01 }, + contextWindow: 131072, + maxOutputTokens: 104857, + }, + { + id: 'mistralai/ministral-8b-2512', + name: 'Mistral: Ministral 3 8B 2512', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.15, cacheRead: 0.015 }, + contextWindow: 262144, + maxOutputTokens: 209715, + }, + { + id: 'mistralai/ministral-8b-2512:batch', + name: 'Mistral: Ministral 3 8B 2512 (batch)', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.075, output: 0.075, cacheRead: 0.0075 }, + contextWindow: 262144, + maxOutputTokens: 209715, + }, + { + id: 'mistralai/mistral-large', + name: 'Mistral Large', + input: ['text', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 2, output: 6, cacheRead: 0.2 }, + contextWindow: 128000, + maxOutputTokens: 102400, + }, + { + id: 'mistralai/mistral-large-2407', + name: 'Mistral Large 2407', + input: ['text', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 2, output: 6, cacheRead: 0.2 }, + contextWindow: 131072, + maxOutputTokens: 104857, + }, + { + id: 'mistralai/mistral-large-2512', + name: 'Mistral: Mistral Large 3 2512', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.5, output: 1.5, cacheRead: 0.05 }, + contextWindow: 262144, + maxOutputTokens: 209715, + }, + { + id: 'mistralai/mistral-large-2512:batch', + name: 'Mistral: Mistral Large 3 2512 (batch)', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.25, output: 0.75, cacheRead: 0.025 }, + contextWindow: 262144, + maxOutputTokens: 209715, + }, + { + id: 'mistralai/mistral-large-4-0', + name: 'Mistral: Mistral Large 4', + input: ['text', 'image'], + reasoning: { levels: { high: 'high', off: 'none' }, budget: false }, + prices: { currency: 'USD', input: 1.36, output: 4.18, cacheRead: 0.14 }, + contextWindow: 1048576, + maxOutputTokens: 262144, + }, + { + id: 'mistralai/mistral-medium-3', + name: 'Mistral: Mistral Medium 3', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.4, output: 2, cacheRead: 0.04 }, + contextWindow: 131072, + maxOutputTokens: 104857, + }, + { + id: 'mistralai/mistral-medium-3-5', + name: 'Mistral: Mistral Medium 3.5', + input: ['text', 'image', 'document'], + reasoning: { levels: { high: 'high', off: 'none' }, budget: false }, + prices: { currency: 'USD', input: 1.5, output: 7.5 }, + contextWindow: 262144, + maxOutputTokens: 209715, + }, + { + id: 'mistralai/mistral-medium-3-5:batch', + name: 'Mistral: Mistral Medium 3.5 (batch)', + input: ['text', 'image', 'document'], + reasoning: { levels: { high: 'high', off: 'none' }, budget: false }, + prices: { currency: 'USD', input: 0.75, output: 3.75 }, + contextWindow: 262144, + maxOutputTokens: 209715, + }, + { + id: 'mistralai/mistral-medium-3.1', + name: 'Mistral: Mistral Medium 3.1', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.4, output: 2, cacheRead: 0.04 }, + contextWindow: 131072, + maxOutputTokens: 104857, + }, + { + id: 'mistralai/mistral-medium-3.1:batch', + name: 'Mistral: Mistral Medium 3.1 (batch)', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.2, output: 1, cacheRead: 0.02 }, + contextWindow: 131072, + maxOutputTokens: 104857, + }, + { + id: 'mistralai/mistral-nemo', + name: 'Mistral: Mistral Nemo', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.029, output: 0.03 }, + contextWindow: 131072, + maxOutputTokens: 16384, + }, + { + id: 'mistralai/mistral-saba', + name: 'Mistral: Saba', + input: ['text', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.2, output: 0.6, cacheRead: 0.02 }, + contextWindow: 32768, + maxOutputTokens: 26214, + }, + { + id: 'mistralai/mistral-small-24b-instruct-2501', + name: 'Mistral: Mistral Small 3', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.05, output: 0.08 }, + contextWindow: 32768, + maxOutputTokens: 16384, + }, + { + id: 'mistralai/mistral-small-2603', + name: 'Mistral: Mistral Small 4', + input: ['text', 'image'], + reasoning: { levels: { high: 'high', off: 'none' }, budget: false }, + prices: { currency: 'USD', input: 0.15, output: 0.6, cacheRead: 0.015 }, + contextWindow: 262144, + maxOutputTokens: 209715, + }, + { + id: 'mistralai/mistral-small-2603:batch', + name: 'Mistral: Mistral Small 4 (batch)', + input: ['text', 'image'], + reasoning: { levels: { high: 'high', off: 'none' }, budget: false }, + prices: { currency: 'USD', input: 0.075, output: 0.3, cacheRead: 0.0075 }, + contextWindow: 262144, + maxOutputTokens: 209715, + }, + { + id: 'mistralai/mistral-small-3.1-24b-instruct', + name: 'Mistral: Mistral Small 3.1 24B', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.351, output: 0.555 }, + contextWindow: 128000, + maxOutputTokens: 102400, + }, + { + id: 'mistralai/mistral-small-3.2-24b-instruct', + name: 'Mistral: Mistral Small 3.2 24B', + input: ['image', 'text'], + reasoning: false, + prices: { currency: 'USD', input: 0.075, output: 0.2 }, + contextWindow: 256000, + maxOutputTokens: 16384, + }, + { + id: 'mistralai/mixtral-8x22b-instruct', + name: 'Mistral: Mixtral 8x22B Instruct', + input: ['text', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 2, output: 6, cacheRead: 0.2 }, + contextWindow: 65536, + maxOutputTokens: 52428, + }, + { + id: 'mistralai/voxtral-small-24b-2507', + name: 'Mistral: Voxtral Small 24B 2507', + input: ['text', 'audio', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.3, cacheRead: 0.01 }, + contextWindow: 32768, + maxOutputTokens: 26214, + }, + { + id: 'moondream/moondream3-preview', + name: 'Moondream: Moondream 3 Preview', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.3, output: 2.5 }, + contextWindow: 32000, + maxOutputTokens: 4096, + }, + { + id: 'moondream/moondream3.1-9b-a2b', + name: 'Moondream: Moondream 3.1', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.3, output: 2.5 }, + contextWindow: 32000, + maxOutputTokens: 4096, + }, + { + id: 'moonshotai/kimi-k2', + name: 'MoonshotAI: Kimi K2 0711', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.57, output: 2.3 }, + contextWindow: 131072, + maxOutputTokens: 98304, + }, + { + id: 'moonshotai/kimi-k2-0905', + name: 'MoonshotAI: Kimi K2 0905', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.6, output: 2.5 }, + contextWindow: 262144, + maxOutputTokens: 98304, + }, + { + id: 'moonshotai/kimi-k2-thinking', + name: 'MoonshotAI: Kimi K2 Thinking', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.6, output: 2.5, cacheRead: 0.15 }, + contextWindow: 262144, + maxOutputTokens: 98304, + }, + { + id: 'moonshotai/kimi-k2.5', + name: 'MoonshotAI: Kimi K2.5', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.5, output: 2.5, cacheRead: 0.15 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'moonshotai/kimi-k2.6', + name: 'MoonshotAI: Kimi K2.6', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.65, output: 3.41, cacheRead: 0.15 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'moonshotai/kimi-k2.7-code', + name: 'MoonshotAI: Kimi K2.7 Code', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.6712, output: 3.35, cacheRead: 0.15 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'moonshotai/kimi-k3', + name: 'MoonshotAI: Kimi K3', + input: ['text', 'image', 'video'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.18, output: 16, cacheRead: 0.17 }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: 'moonshotai/kimi-k3:batch', + name: 'MoonshotAI: Kimi K3 (batch)', + input: ['text', 'image', 'video'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 2.28, output: 11.4, cacheRead: 0.228 }, + contextWindow: 1048576, + maxOutputTokens: 16384, + }, + { + id: 'moonshotai/kimi-k3.1-pro', + name: 'MoonshotAI: Kimi K3.1 Pro', + input: ['text', 'image', 'video'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 2, output: 10, cacheRead: 0.2 }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: 'morph/morph-v3-fast', + name: 'Morph: Morph V3 Fast', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.8, output: 1.2 }, + contextWindow: 262144, + maxOutputTokens: 131072, + }, + { + id: 'morph/morph-v3-large', + name: 'Morph: Morph V3 Large', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.9, output: 1.9 }, + contextWindow: 262144, + maxOutputTokens: 131072, + }, + { + id: 'nex-agi/nex-n2.5-mini', + name: 'Nex AGI: Nex-N2.5-Mini', + input: ['text', 'image'], + reasoning: { + levels: { high: 'high', medium: 'medium', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.025, output: 0.1, cacheRead: 0.0025 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'nex-agi/nex-n2.5-pro', + name: 'Nex AGI: Nex-N2.5-Pro', + input: ['text', 'image'], + reasoning: { + levels: { high: 'high', medium: 'medium', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.075, output: 0.25, cacheRead: 0.015 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'nousresearch/hermes-3-llama-3.1-405b', + name: 'Nous: Hermes 3 405B Instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 1, output: 1 }, + contextWindow: 131072, + maxOutputTokens: 16384, + }, + { + id: 'nousresearch/hermes-3-llama-3.1-70b', + name: 'Nous: Hermes 3 70B Instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.7, output: 0.7 }, + contextWindow: 131072, + maxOutputTokens: 16384, + }, + { + id: 'nousresearch/hermes-4-405b', + name: 'Nous: Hermes 4 405B', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1, output: 3 }, + contextWindow: 131072, + maxOutputTokens: 117964, + }, + { + id: 'nvidia/nemotron-3-nano-30b-a3b', + name: 'NVIDIA: Nemotron 3 Nano 30B A3B', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.06, output: 0.24 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free', + name: 'NVIDIA: Nemotron 3 Nano Omni (free)', + input: ['text', 'audio', 'image', 'video'], + reasoning: { levels: {}, budget: true }, + contextWindow: 256000, + maxOutputTokens: 65536, + }, + { + id: 'nvidia/nemotron-3-super-120b-a12b', + name: 'NVIDIA: Nemotron 3 Super', + input: ['text'], + reasoning: { + levels: { medium: 'medium', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.3, output: 2.4, cacheRead: 0.15 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'nvidia/nemotron-3-super-120b-a12b:free', + name: 'NVIDIA: Nemotron 3 Super (free)', + input: ['text'], + reasoning: { + levels: { medium: 'medium', low: 'low', off: 'none' }, + budget: false, + }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'nvidia/nemotron-3-ultra-550b-a55b', + name: 'NVIDIA: Nemotron 3 Ultra', + input: ['text'], + reasoning: { + levels: { high: 'high', medium: 'medium', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.6, output: 2.4, cacheRead: 0.12 }, + contextWindow: 262144, + maxOutputTokens: 182520, + }, + { + id: 'nvidia/nemotron-3-ultra-550b-a55b:free', + name: 'NVIDIA: Nemotron 3 Ultra (free)', + input: ['text'], + reasoning: { + levels: { high: 'high', medium: 'medium', off: 'none' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 65536, + }, + { + id: 'nvidia/nemotron-3.5-content-safety', + name: 'NVIDIA: Nemotron 3.5 Content Safety', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.2, output: 0.2 }, + contextWindow: 131072, + maxOutputTokens: 117964, + }, + { + id: 'nvidia/nemotron-3.5-content-safety:free', + name: 'NVIDIA: Nemotron 3.5 Content Safety (free)', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + contextWindow: 128000, + maxOutputTokens: 8192, + }, + { + id: 'nvidia/nemotron-3.5-lightning', + name: 'NVIDIA: Nemotron 3.5 Lightning', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.07, output: 0.2, cacheRead: 0.04 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'nvidia/nemotron-3.5-lightning:free', + name: 'NVIDIA: Nemotron 3.5 Lightning (free)', + input: ['text'], + reasoning: { levels: {}, budget: false }, + contextWindow: 1000000, + maxOutputTokens: 65536, + }, + { + id: 'nvidia/nemotron-3.5-super-vl', + name: 'NVIDIA: Nemotron 3.5 Super VL', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.15, output: 0.5, cacheRead: 0.02 }, + contextWindow: 1048576, + maxOutputTokens: 235929, + }, + { + id: 'nvidia/nemotron-3.5-super-vl:free', + name: 'NVIDIA: Nemotron 3.5 Super VL (free)', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'nvidia/switchyard', + name: 'NVIDIA: Switchyard', + input: ['text'], + reasoning: false, + contextWindow: 1000000, + }, + { + id: 'openai/gpt-3.5-turbo-0613', + name: 'OpenAI: GPT-3.5 Turbo (older v0613)', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 1, output: 2 }, + contextWindow: 4095, + maxOutputTokens: 3685, + }, + { + id: 'openai/gpt-3.5-turbo-16k', + name: 'OpenAI: GPT-3.5 Turbo 16k', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 3, output: 4 }, + contextWindow: 16385, + maxOutputTokens: 4096, + }, + { + id: 'openai/gpt-4', + name: 'OpenAI: GPT-4', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 30, output: 60 }, + contextWindow: 8191, + maxOutputTokens: 4096, + }, + { + id: 'openai/gpt-4-turbo', + name: 'OpenAI: GPT-4 Turbo', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 10, output: 30 }, + contextWindow: 128000, + maxOutputTokens: 4096, + }, + { + id: 'openai/gpt-4-turbo:batch', + name: 'OpenAI: GPT-4 Turbo (batch)', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 5, output: 15 }, + contextWindow: 128000, + maxOutputTokens: 4096, + }, + { + id: 'openai/gpt-4.1', + name: 'OpenAI: GPT-4.1', + input: ['image', 'text', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 2, output: 8, cacheRead: 0.5 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'openai/gpt-4.1-mini', + name: 'OpenAI: GPT-4.1 Mini', + input: ['image', 'text', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.4, output: 1.6, cacheRead: 0.1 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'openai/gpt-4.1-mini:batch', + name: 'OpenAI: GPT-4.1 Mini (batch)', + input: ['image', 'text', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.2, output: 0.8, cacheRead: 0.05 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'openai/gpt-4.1-nano', + name: 'OpenAI: GPT-4.1 Nano', + input: ['image', 'text', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.4, cacheRead: 0.03 }, + contextWindow: 1047576, + maxOutputTokens: 942818, + }, + { + id: 'openai/gpt-4.1-nano:batch', + name: 'OpenAI: GPT-4.1 Nano (batch)', + input: ['image', 'text', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.05, output: 0.2, cacheRead: 0.0125 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'openai/gpt-4.1:batch', + name: 'OpenAI: GPT-4.1 (batch)', + input: ['image', 'text', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 1, output: 4, cacheRead: 0.25 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'openai/gpt-4o', + name: 'OpenAI: GPT-4o', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 2.5, output: 10, cacheRead: 1.25 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-4o-2024-05-13', + name: 'OpenAI: GPT-4o (2024-05-13)', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 5, output: 15 }, + contextWindow: 128000, + maxOutputTokens: 4096, + }, + { + id: 'openai/gpt-4o-2024-08-06', + name: 'OpenAI: GPT-4o (2024-08-06)', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 2.5, output: 10, cacheRead: 1.25 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-4o-2024-11-20', + name: 'OpenAI: GPT-4o (2024-11-20)', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 2.5, output: 10, cacheRead: 1.25 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-4o-mini', + name: 'OpenAI: GPT-4o-mini', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.6, cacheRead: 0.075 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-4o-mini-2024-07-18', + name: 'OpenAI: GPT-4o-mini (2024-07-18)', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.6, cacheRead: 0.075 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-4o-mini:batch', + name: 'OpenAI: GPT-4o-mini (batch)', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.075, output: 0.3, cacheRead: 0.0375 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-4o:batch', + name: 'OpenAI: GPT-4o (batch)', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 1.25, output: 5, cacheRead: 0.625 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-5', + name: 'OpenAI: GPT-5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5-image', + name: 'OpenAI: GPT-5 Image', + input: ['image', 'text', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 10, output: 10, cacheRead: 1.25 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5-image-mini', + name: 'OpenAI: GPT-5 Image Mini', + input: ['document', 'image', 'text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 2.5, output: 2, cacheRead: 0.25 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5-mini', + name: 'OpenAI: GPT-5 Mini', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.25, output: 2, cacheRead: 0.025 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5-mini:batch', + name: 'OpenAI: GPT-5 Mini (batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.125, output: 1, cacheRead: 0.0125 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5-nano', + name: 'OpenAI: GPT-5 Nano', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.05, output: 0.4, cacheRead: 0.005 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5-nano:batch', + name: 'OpenAI: GPT-5 Nano (batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.025, output: 0.2, cacheRead: 0.0025 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5-pro', + name: 'OpenAI: GPT-5 Pro', + input: ['image', 'text', 'document'], + reasoning: { levels: { high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 15, output: 120 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5-pro:batch', + name: 'OpenAI: GPT-5 Pro (batch)', + input: ['image', 'text', 'document'], + reasoning: { levels: { high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 7.5, output: 60 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5:batch', + name: 'OpenAI: GPT-5 (batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.625, output: 5, cacheRead: 0.0625 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.1', + name: 'OpenAI: GPT-5.1', + input: ['image', 'text', 'document'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.1-codex', + name: 'OpenAI: GPT-5.1-Codex', + input: ['text', 'image'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.13 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.1-codex-max', + name: 'OpenAI: GPT-5.1-Codex-Max', + input: ['text', 'image'], + reasoning: { + levels: { xhigh: 'xhigh', high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.1-codex-mini', + name: 'OpenAI: GPT-5.1-Codex-Mini', + input: ['image', 'text'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.25, output: 2, cacheRead: 0.03 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.1:batch', + name: 'OpenAI: GPT-5.1 (batch)', + input: ['image', 'text', 'document'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.625, output: 5, cacheRead: 0.0625 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.2', + name: 'OpenAI: GPT-5.2', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1.75, output: 14, cacheRead: 0.175 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.2-chat', + name: 'OpenAI: GPT-5.2 Chat', + input: ['document', 'image', 'text'], + reasoning: false, + prices: { currency: 'USD', input: 1.75, output: 14, cacheRead: 0.175 }, + contextWindow: 128000, + maxOutputTokens: 32000, + }, + { + id: 'openai/gpt-5.2-codex', + name: 'OpenAI: GPT-5.2-Codex', + input: ['text', 'image'], + reasoning: { + levels: { xhigh: 'xhigh', high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.75, output: 14, cacheRead: 0.175 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.2-pro', + name: 'OpenAI: GPT-5.2 Pro', + input: ['image', 'text', 'document'], + reasoning: { + levels: { xhigh: 'xhigh', high: 'high', medium: 'medium' }, + budget: false, + }, + prices: { currency: 'USD', input: 21, output: 168 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.2-pro:batch', + name: 'OpenAI: GPT-5.2 Pro (batch)', + input: ['image', 'text', 'document'], + reasoning: { + levels: { xhigh: 'xhigh', high: 'high', medium: 'medium' }, + budget: false, + }, + prices: { currency: 'USD', input: 10.5, output: 84 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.2:batch', + name: 'OpenAI: GPT-5.2 (batch)', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.875, output: 7, cacheRead: 0.0875 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.3-codex', + name: 'OpenAI: GPT-5.3-Codex', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1.75, output: 14, cacheRead: 0.175 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.4', + name: 'OpenAI: GPT-5.4', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.5, + output: 15, + cacheRead: 0.25, + tiers: [ + { inputTokensAbove: 272000, input: 5, output: 22.5, cacheRead: 0.5 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.4-image-2', + name: 'OpenAI: GPT-5.4 Image 2', + input: ['image', 'text', 'document'], + reasoning: { + levels: { + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { currency: 'USD', input: 8, output: 15, cacheRead: 2 }, + contextWindow: 272000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.4-mini', + name: 'OpenAI: GPT-5.4 Mini', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.75, output: 4.5, cacheRead: 0.075 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.4-mini:batch', + name: 'OpenAI: GPT-5.4 Mini (batch)', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.375, output: 2.25, cacheRead: 0.0375 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.4-nano', + name: 'OpenAI: GPT-5.4 Nano', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.2, output: 1.25, cacheRead: 0.02 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.4-nano:batch', + name: 'OpenAI: GPT-5.4 Nano (batch)', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.1, output: 0.625, cacheRead: 0.01 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.4-pro', + name: 'OpenAI: GPT-5.4 Pro', + input: ['text', 'image', 'document'], + reasoning: { + levels: { xhigh: 'xhigh', high: 'high', medium: 'medium' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 30, + output: 180, + tiers: [{ inputTokensAbove: 272000, input: 60, output: 270 }], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.4-pro:batch', + name: 'OpenAI: GPT-5.4 Pro (batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { xhigh: 'xhigh', high: 'high', medium: 'medium' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 15, + output: 90, + tiers: [{ inputTokensAbove: 272000, input: 30, output: 135 }], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.4:batch', + name: 'OpenAI: GPT-5.4 (batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1.25, + output: 7.5, + cacheRead: 0.125, + tiers: [ + { + inputTokensAbove: 272000, + input: 2.5, + output: 11.25, + cacheRead: 0.25, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.5', + name: 'OpenAI: GPT-5.5', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 30, + cacheRead: 0.5, + tiers: [ + { inputTokensAbove: 272000, input: 10, output: 45, cacheRead: 1 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.5-pro', + name: 'OpenAI: GPT-5.5 Pro', + input: ['document', 'image', 'text'], + reasoning: { + levels: { xhigh: 'xhigh', high: 'high', medium: 'medium' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 30, + output: 180, + tiers: [{ inputTokensAbove: 272000, input: 60, output: 270 }], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.5-pro:batch', + name: 'OpenAI: GPT-5.5 Pro (batch)', + input: ['document', 'image', 'text'], + reasoning: { + levels: { xhigh: 'xhigh', high: 'high', medium: 'medium' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 15, + output: 90, + tiers: [{ inputTokensAbove: 272000, input: 30, output: 135 }], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.5:batch', + name: 'OpenAI: GPT-5.5 (batch)', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.5, + output: 15, + cacheRead: 0.25, + tiers: [ + { inputTokensAbove: 272000, input: 5, output: 22.5, cacheRead: 0.5 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-luna', + name: 'OpenAI: GPT-5.6 Luna', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.2, + output: 1.2, + cacheRead: 0.02, + cacheWrite: 0.25, + tiers: [ + { + inputTokensAbove: 272000, + input: 0.4, + output: 1.8, + cacheRead: 0.04, + cacheWrite: 0.5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-luna-pro', + name: 'OpenAI: GPT-5.6 Luna Pro', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.2, + output: 1.2, + cacheRead: 0.02, + cacheWrite: 0.25, + tiers: [ + { + inputTokensAbove: 272000, + input: 0.4, + output: 1.8, + cacheRead: 0.04, + cacheWrite: 0.5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-luna-pro:batch', + name: 'OpenAI: GPT-5.6 Luna Pro (batch)', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.1, + output: 0.6, + cacheRead: 0.01, + tiers: [ + { inputTokensAbove: 272000, input: 0.2, output: 0.9, cacheRead: 0.02 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-luna:batch', + name: 'OpenAI: GPT-5.6 Luna (batch)', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.1, + output: 0.6, + cacheRead: 0.01, + tiers: [ + { inputTokensAbove: 272000, input: 0.2, output: 0.9, cacheRead: 0.02 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-sol', + name: 'OpenAI: GPT-5.6 Sol', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 4, + output: 20, + cacheRead: 0.4, + cacheWrite: 5, + tiers: [ + { + inputTokensAbove: 272000, + input: 8, + output: 30, + cacheRead: 0.8, + cacheWrite: 10, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-sol-pro', + name: 'OpenAI: GPT-5.6 Sol Pro', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 4, + output: 20, + cacheRead: 0.4, + cacheWrite: 5, + tiers: [ + { + inputTokensAbove: 272000, + input: 8, + output: 30, + cacheRead: 0.8, + cacheWrite: 10, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-sol-pro:batch', + name: 'OpenAI: GPT-5.6 Sol Pro (batch)', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.2, + cacheWrite: 2.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 4, + output: 15, + cacheRead: 0.4, + cacheWrite: 5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-sol:batch', + name: 'OpenAI: GPT-5.6 Sol (batch)', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.2, + cacheWrite: 2.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 4, + output: 15, + cacheRead: 0.4, + cacheWrite: 5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-terra', + name: 'OpenAI: GPT-5.6 Terra', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 12, + cacheRead: 0.2, + cacheWrite: 2.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 4, + output: 18, + cacheRead: 0.4, + cacheWrite: 5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-terra-pro', + name: 'OpenAI: GPT-5.6 Terra Pro', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 12, + cacheRead: 0.2, + cacheWrite: 2.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 4, + output: 18, + cacheRead: 0.4, + cacheWrite: 5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-terra-pro:batch', + name: 'OpenAI: GPT-5.6 Terra Pro (batch)', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 6, + cacheRead: 0.1, + tiers: [ + { inputTokensAbove: 272000, input: 2, output: 9, cacheRead: 0.2 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-terra:batch', + name: 'OpenAI: GPT-5.6 Terra (batch)', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 6, + cacheRead: 0.1, + tiers: [ + { inputTokensAbove: 272000, input: 2, output: 9, cacheRead: 0.2 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-astra', + name: 'OpenAI: GPT-6 Astra', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 1, + cacheWrite: 12.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 20, + output: 75, + cacheRead: 2, + cacheWrite: 25, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-astra-pro', + name: 'OpenAI: GPT-6 Astra Pro', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 1, + cacheWrite: 12.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 20, + output: 75, + cacheRead: 2, + cacheWrite: 25, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-astra-pro:batch', + name: 'OpenAI: GPT-6 Astra Pro (batch)', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + tiers: [ + { + inputTokensAbove: 272000, + input: 10, + output: 37.5, + cacheRead: 1, + cacheWrite: 12.5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-astra:batch', + name: 'OpenAI: GPT-6 Astra (batch)', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + tiers: [ + { + inputTokensAbove: 272000, + input: 10, + output: 37.5, + cacheRead: 1, + cacheWrite: 12.5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-luna', + name: 'OpenAI: GPT-6 Luna', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.1, + output: 0.5, + cacheRead: 0.01, + cacheWrite: 0.125, + tiers: [ + { + inputTokensAbove: 272000, + input: 0.2, + output: 0.75, + cacheRead: 0.02, + cacheWrite: 0.25, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-luna-pro', + name: 'OpenAI: GPT-6 Luna Pro', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.1, + output: 0.5, + cacheRead: 0.01, + cacheWrite: 0.125, + tiers: [ + { + inputTokensAbove: 272000, + input: 0.2, + output: 0.75, + cacheRead: 0.02, + cacheWrite: 0.25, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-luna-pro:batch', + name: 'OpenAI: GPT-6 Luna Pro (batch)', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.05, + output: 0.25, + cacheRead: 0.005, + cacheWrite: 0.0625, + tiers: [ + { + inputTokensAbove: 272000, + input: 0.1, + output: 0.375, + cacheRead: 0.01, + cacheWrite: 0.125, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-luna:batch', + name: 'OpenAI: GPT-6 Luna (batch)', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.05, + output: 0.25, + cacheRead: 0.005, + cacheWrite: 0.0625, + tiers: [ + { + inputTokensAbove: 272000, + input: 0.1, + output: 0.375, + cacheRead: 0.01, + cacheWrite: 0.125, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-sol', + name: 'OpenAI: GPT-6 Sol', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.2, + cacheWrite: 2.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 4, + output: 15, + cacheRead: 0.4, + cacheWrite: 5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-sol-pro', + name: 'OpenAI: GPT-6 Sol Pro', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.2, + cacheWrite: 2.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 4, + output: 15, + cacheRead: 0.4, + cacheWrite: 5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-sol-pro:batch', + name: 'OpenAI: GPT-6 Sol Pro (batch)', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 5, + cacheRead: 0.1, + cacheWrite: 1.25, + tiers: [ + { + inputTokensAbove: 272000, + input: 2, + output: 7.5, + cacheRead: 0.2, + cacheWrite: 2.5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-sol:batch', + name: 'OpenAI: GPT-6 Sol (batch)', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + off: 'none', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 5, + cacheRead: 0.1, + cacheWrite: 1.25, + tiers: [ + { + inputTokensAbove: 272000, + input: 2, + output: 7.5, + cacheRead: 0.2, + cacheWrite: 2.5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6.1-sol', + name: 'OpenAI: GPT-6.1 Sol', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.1, + cacheWrite: 2.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 4, + output: 15, + cacheRead: 0.2, + cacheWrite: 5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6.1-sol-pro', + name: 'OpenAI: GPT-6.1 Sol Pro', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.1, + cacheWrite: 2.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 4, + output: 15, + cacheRead: 0.2, + cacheWrite: 5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6.1-sol-pro:batch', + name: 'OpenAI: GPT-6.1 Sol Pro (batch)', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 5, + cacheRead: 0.05, + cacheWrite: 1.25, + tiers: [ + { + inputTokensAbove: 272000, + input: 2, + output: 7.5, + cacheRead: 0.1, + cacheWrite: 2.5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6.1-sol:batch', + name: 'OpenAI: GPT-6.1 Sol (batch)', + input: ['document', 'image', 'text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 5, + cacheRead: 0.05, + cacheWrite: 1.25, + tiers: [ + { + inputTokensAbove: 272000, + input: 2, + output: 7.5, + cacheRead: 0.1, + cacheWrite: 2.5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-audio', + name: 'OpenAI: GPT Audio', + input: ['text', 'audio'], + reasoning: false, + prices: { currency: 'USD', input: 2.5, output: 10 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-audio-mini', + name: 'OpenAI: GPT Audio Mini', + input: ['text', 'audio'], + reasoning: false, + prices: { currency: 'USD', input: 0.6, output: 2.4 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-chat-latest', + name: 'OpenAI: GPT Chat Latest', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 5, output: 30, cacheRead: 0.5 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-oss-120b', + name: 'OpenAI: gpt-oss-120b', + input: ['text'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.15, output: 0.6, cacheRead: 0.075 }, + contextWindow: 131072, + maxOutputTokens: 65536, + }, + { + id: 'openai/gpt-oss-120b:batch', + name: 'OpenAI: gpt-oss-120b (batch)', + input: ['text'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.0296, output: 0.136 }, + contextWindow: 131072, + maxOutputTokens: 117964, + }, + { + id: 'openai/gpt-oss-20b', + name: 'OpenAI: gpt-oss-20b', + input: ['text'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.018, output: 0.09, cacheRead: 0.009 }, + contextWindow: 131072, + maxOutputTokens: 32768, + }, + { + id: 'openai/gpt-oss-20b:batch', + name: 'OpenAI: gpt-oss-20b (batch)', + input: ['text'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.024, output: 0.112 }, + contextWindow: 131072, + maxOutputTokens: 117964, + }, + { + id: 'openai/gpt-oss-safeguard-20b', + name: 'OpenAI: gpt-oss-safeguard-20b', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.075, output: 0.3, cacheRead: 0.0375 }, + contextWindow: 131072, + maxOutputTokens: 65536, + }, + { + id: 'openai/o1', + name: 'OpenAI: o1', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 15, output: 60, cacheRead: 7.5 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'openai/o1-pro', + name: 'OpenAI: o1-pro', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 150, output: 600 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'openai/o3', + name: 'OpenAI: o3', + input: ['image', 'text', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 2, output: 8, cacheRead: 0.5 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'openai/o3-mini', + name: 'OpenAI: o3 Mini', + input: ['text', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.1, output: 4.4, cacheRead: 0.55 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'openai/o3-mini-high', + name: 'OpenAI: o3 Mini High', + input: ['text', 'document'], + reasoning: { levels: { high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 1.1, output: 4.4, cacheRead: 0.55 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'openai/o3-mini:batch', + name: 'OpenAI: o3 Mini (batch)', + input: ['text', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.55, output: 2.2, cacheRead: 0.275 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'openai/o3-pro', + name: 'OpenAI: o3 Pro', + input: ['text', 'document', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 20, output: 80 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'openai/o3:batch', + name: 'OpenAI: o3 (batch)', + input: ['image', 'text', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1, output: 4, cacheRead: 0.25 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'openai/o4-mini', + name: 'OpenAI: o4 Mini', + input: ['image', 'text', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.1, output: 4.4, cacheRead: 0.275 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'openai/o4-mini-high', + name: 'OpenAI: o4 Mini High', + input: ['image', 'text', 'document'], + reasoning: { levels: { high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 1.1, output: 4.4, cacheRead: 0.275 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'openai/o4-mini:batch', + name: 'OpenAI: o4 Mini (batch)', + input: ['image', 'text', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.55, output: 2.2, cacheRead: 0.1375 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'openrouter/auto', + name: 'Auto Router', + input: ['text', 'image', 'audio', 'document', 'video'], + reasoning: { levels: {}, budget: false }, + contextWindow: 2000000, + }, + { + id: 'openrouter/auto-beta', + name: 'Auto Router (Beta)', + input: ['text', 'image', 'audio', 'document', 'video'], + reasoning: { levels: {}, budget: false }, + contextWindow: 2000000, + }, + { + id: 'openrouter/bodybuilder', + name: 'Body Builder (beta)', + input: ['text'], + reasoning: false, + contextWindow: 128000, + }, + { + id: 'openrouter/free', + name: 'Free Models Router', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + contextWindow: 200000, + }, + { + id: 'openrouter/fusion', + name: 'OpenRouter: Fusion', + input: ['text'], + reasoning: false, + contextWindow: 1000000, + }, + { + id: 'openrouter/pareto-code', + name: 'Pareto Code Router', + input: ['text'], + reasoning: { levels: {}, budget: false }, + contextWindow: 2000000, + }, + { + id: 'perceptron/perceptron-mk1', + name: 'Perceptron: Perceptron Mk1', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.15, output: 1.5 }, + contextWindow: 32768, + maxOutputTokens: 8192, + }, + { + id: 'perceptron/perceptron-mk1.5', + name: 'Perceptron: Perceptron Mk1.5', + input: ['text', 'image', 'video', 'audio'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + off: 'none', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.15, output: 1.5 }, + contextWindow: 36864, + maxOutputTokens: 8192, + }, + { + id: 'perplexity/sonar', + name: 'Perplexity: Sonar', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 1, output: 1 }, + contextWindow: 127072, + maxOutputTokens: 114364, + }, + { + id: 'perplexity/sonar-deep-research', + name: 'Perplexity: Sonar Deep Research', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 2, output: 8 }, + contextWindow: 128000, + maxOutputTokens: 115200, + }, + { + id: 'perplexity/sonar-pro', + name: 'Perplexity: Sonar Pro', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 3, output: 15 }, + contextWindow: 200000, + maxOutputTokens: 8000, + }, + { + id: 'perplexity/sonar-pro-search', + name: 'Perplexity: Sonar Pro Search', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 3, output: 15 }, + contextWindow: 200000, + maxOutputTokens: 8000, + }, + { + id: 'perplexity/sonar-reasoning-pro', + name: 'Perplexity: Sonar Reasoning Pro', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 2, output: 8 }, + contextWindow: 128000, + maxOutputTokens: 115200, + }, + { + id: 'poolside/laguna-s-2.1', + name: 'Poolside: Laguna S 2.1', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.09, output: 0.18, cacheRead: 0.009 }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: 'poolside/laguna-s-2.1:free', + name: 'Poolside: Laguna S 2.1 (free)', + input: ['text'], + reasoning: { levels: {}, budget: false }, + contextWindow: 262144, + maxOutputTokens: 32768, + }, + { + id: 'poolside/laguna-xs-2.1', + name: 'Poolside: Laguna XS 2.1', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.06, output: 0.12, cacheRead: 0.03 }, + contextWindow: 262144, + maxOutputTokens: 32768, + }, + { + id: 'poolside/laguna-xs-2.1:free', + name: 'Poolside: Laguna XS 2.1 (free)', + input: ['text'], + reasoning: { levels: {}, budget: false }, + contextWindow: 262144, + maxOutputTokens: 32768, + }, + { + id: 'prism-ml/ternary-bonsai-2-27b', + name: 'PrismML: Ternary Bonsai 2 27B', + input: ['text', 'image'], + reasoning: { + levels: { xhigh: 'xhigh', medium: 'medium', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.075, output: 0.5, cacheRead: 0.0375 }, + contextWindow: 262144, + maxOutputTokens: 32768, + }, + { + id: 'qwen/qwen-2.5-72b-instruct', + name: 'Qwen2.5 72B Instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.36, output: 0.4 }, + contextWindow: 32768, + maxOutputTokens: 16384, + }, + { + id: 'qwen/qwen-2.5-7b-instruct', + name: 'Qwen: Qwen2.5 7B Instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.2 }, + contextWindow: 32768, + maxOutputTokens: 29491, + }, + { + id: 'qwen/qwen-2.5-coder-32b-instruct', + name: 'Qwen2.5 Coder 32B Instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.66, output: 1 }, + contextWindow: 32768, + maxOutputTokens: 29491, + }, + { + id: 'qwen/qwen-plus', + name: 'Qwen: Qwen-Plus', + input: ['text'], + reasoning: false, + prices: { + currency: 'USD', + input: 0.26, + output: 0.78, + cacheRead: 0.052, + cacheWrite: 0.325, + tiers: [ + { + inputTokensAbove: 256000, + input: 0.78, + output: 2.34, + cacheRead: 0.156, + cacheWrite: 0.975, + }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 32768, + }, + { + id: 'qwen/qwen2.5-vl-72b-instruct', + name: 'Qwen: Qwen2.5 VL 72B Instruct', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.8, output: 1, cacheRead: 0.4 }, + contextWindow: 128000, + maxOutputTokens: 115200, + }, + { + id: 'qwen/qwen3-14b', + name: 'Qwen: Qwen3 14B', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.12, output: 0.24 }, + contextWindow: 40960, + maxOutputTokens: 16384, + }, + { + id: 'qwen/qwen3-235b-a22b-2507', + name: 'Qwen: Qwen3 235B A22B Instruct 2507', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.09, output: 0.55 }, + contextWindow: 262144, + maxOutputTokens: 16384, + }, + { + id: 'qwen/qwen3-235b-a22b-thinking-2507', + name: 'Qwen: Qwen3 235B A22B Thinking 2507', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.45, output: 3.5 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'qwen/qwen3-30b-a3b', + name: 'Qwen: Qwen3 30B A3B', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.12, output: 0.5 }, + contextWindow: 40960, + maxOutputTokens: 16384, + }, + { + id: 'qwen/qwen3-30b-a3b-instruct-2507', + name: 'Qwen: Qwen3 30B A3B Instruct 2507', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.09, output: 0.3 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'qwen/qwen3-32b', + name: 'Qwen: Qwen3 32B', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.08, output: 0.28 }, + contextWindow: 131072, + maxOutputTokens: 16384, + }, + { + id: 'qwen/qwen3-coder', + name: 'Qwen: Qwen3 Coder 480B A35B', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.3, output: 1, cacheRead: 0.1 }, + contextWindow: 262144, + maxOutputTokens: 65536, + }, + { + id: 'qwen/qwen3-coder-30b-a3b-instruct', + name: 'Qwen: Qwen3 Coder 30B A3B Instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.07, output: 0.28 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'qwen/qwen3-coder-flash', + name: 'Qwen: Qwen3 Coder Flash', + input: ['text'], + reasoning: false, + prices: { + currency: 'USD', + input: 0.195, + output: 0.975, + cacheRead: 0.039, + cacheWrite: 0.24375, + tiers: [ + { + inputTokensAbove: 32000, + input: 0.325, + output: 1.625, + cacheRead: 0.065, + cacheWrite: 0.40625, + }, + { + inputTokensAbove: 128000, + input: 0.52, + output: 2.6, + cacheRead: 0.104, + cacheWrite: 0.65, + }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 65536, + }, + { + id: 'qwen/qwen3-coder-next', + name: 'Qwen: Qwen3 Coder Next', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.12, output: 0.8, cacheRead: 0.07 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'qwen/qwen3-next-80b-a3b-instruct', + name: 'Qwen: Qwen3 Next 80B A3B Instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.09, output: 1.1 }, + contextWindow: 262144, + maxOutputTokens: 16384, + }, + { + id: 'qwen/qwen3-next-80b-a3b-thinking', + name: 'Qwen: Qwen3 Next 80B A3B Thinking', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.15, output: 1.2 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'qwen/qwen3-vl-235b-a22b-instruct', + name: 'Qwen: Qwen3 VL 235B A22B Instruct', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.21, output: 1.9, cacheRead: 0.1 }, + contextWindow: 262144, + maxOutputTokens: 32768, + }, + { + id: 'qwen/qwen3-vl-30b-a3b-instruct', + name: 'Qwen: Qwen3 VL 30B A3B Instruct', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.6 }, + contextWindow: 262144, + maxOutputTokens: 16384, + }, + { + id: 'qwen/qwen3-vl-30b-a3b-thinking', + name: 'Qwen: Qwen3 VL 30B A3B Thinking', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.29, output: 1 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'qwen/qwen3-vl-8b-instruct', + name: 'Qwen: Qwen3 VL 8B Instruct', + input: ['image', 'text'], + reasoning: false, + prices: { currency: 'USD', input: 0.25, output: 0.75, cacheRead: 0.12 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'qwen/qwen3.5-122b-a10b', + name: 'Qwen: Qwen3.5-122B-A10B', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.26, output: 2.08 }, + contextWindow: 262144, + maxOutputTokens: 65536, + }, + { + id: 'qwen/qwen3.5-27b', + name: 'Qwen: Qwen3.5-27B', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.27, output: 2.16, cacheRead: 0.27 }, + contextWindow: 262144, + maxOutputTokens: 65536, + }, + { + id: 'qwen/qwen3.5-35b-a3b', + name: 'Qwen: Qwen3.5-35B-A3B', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.14, output: 1, cacheRead: 0.05 }, + contextWindow: 262144, + maxOutputTokens: 81920, + }, + { + id: 'qwen/qwen3.5-397b-a17b', + name: 'Qwen: Qwen3.5 397B A17B', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.5, output: 3.6, cacheRead: 0.3 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'qwen/qwen3.5-9b', + name: 'Qwen: Qwen3.5-9B', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.17, output: 0.25 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'qwen/qwen3.5-flash-02-23', + name: 'Qwen: Qwen3.5-Flash', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.065, output: 0.26 }, + contextWindow: 1000000, + maxOutputTokens: 65536, + }, + { + id: 'qwen/qwen3.5-plus-02-15', + name: 'Qwen: Qwen3.5 Plus 2026-02-15', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 0.26, + output: 1.56, + tiers: [{ inputTokensAbove: 256000, input: 0.325, output: 1.95 }], + }, + contextWindow: 1000000, + maxOutputTokens: 65536, + }, + { + id: 'qwen/qwen3.5-plus-20260420', + name: 'Qwen: Qwen3.5 Plus 2026-04-20', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 0.3, + output: 1.8, + cacheWrite: 0.375, + tiers: [ + { + inputTokensAbove: 256000, + input: 0.375, + output: 2.25, + cacheWrite: 0.46875, + }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 65536, + }, + { + id: 'qwen/qwen3.6-27b', + name: 'Qwen: Qwen3.6 27B', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.32, output: 3.2 }, + contextWindow: 262144, + maxOutputTokens: 81920, + }, + { + id: 'qwen/qwen3.6-35b-a3b', + name: 'Qwen: Qwen3.6 35B A3B', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.1, output: 0.95, cacheRead: 0.05 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'qwen/qwen3.6-flash', + name: 'Qwen: Qwen3.6 Flash', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 0.1875, + output: 1.125, + cacheWrite: 0.234375, + tiers: [ + { + inputTokensAbove: 256000, + input: 0.75, + output: 3, + cacheWrite: 0.9375, + }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 65536, + }, + { + id: 'qwen/qwen3.6-plus', + name: 'Qwen: Qwen3.6 Plus', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 0.325, + output: 1.95, + cacheWrite: 0.40625, + tiers: [ + { + inputTokensAbove: 256000, + input: 1.3, + output: 3.9, + cacheWrite: 1.625, + }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 65536, + }, + { + id: 'qwen/qwen3.7-flash', + name: 'Qwen: Qwen3.7 Flash', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 0.03, + output: 0.13, + cacheRead: 0.006, + cacheWrite: 0.038, + tiers: [ + { + inputTokensAbove: 32000, + input: 0.1, + output: 0.4, + cacheRead: 0.02, + cacheWrite: 0.125, + }, + { + inputTokensAbove: 256000, + input: 0.2, + output: 0.8, + cacheRead: 0.04, + cacheWrite: 0.25, + }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 65536, + }, + { + id: 'qwen/qwen3.7-max', + name: 'Qwen: Qwen3.7 Max', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 1.475, + output: 4.425, + cacheRead: 0.295, + cacheWrite: 1.84375, + }, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'qwen/qwen3.7-plus', + name: 'Qwen: Qwen3.7 Plus', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 0.32, + output: 1.28, + cacheRead: 0.064, + cacheWrite: 0.4, + tiers: [ + { + inputTokensAbove: 256000, + input: 0.96, + output: 3.84, + cacheRead: 0.192, + cacheWrite: 1.2, + }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'qwen/qwen3.7-plus:batch', + name: 'Qwen: Qwen3.7 Plus (batch)', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.23, output: 0.92 }, + contextWindow: 262144, + maxOutputTokens: 131072, + }, + { + id: 'qwen/qwen3.8-2.4t-a95b', + name: 'Qwen: Qwen3.8 2.4T A95B', + input: ['text'], + reasoning: { + levels: { xhigh: 'xhigh', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 2, output: 6, cacheRead: 0.25 }, + contextWindow: 1048576, + maxOutputTokens: 909000, + }, + { + id: 'qwen/qwen3.8-27b', + name: 'Qwen: Qwen3.8 27B', + input: ['text', 'image', 'video'], + reasoning: { + levels: { xhigh: 'xhigh', medium: 'medium', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.2, output: 2.5, cacheRead: 0.09 }, + contextWindow: 1000000, + maxOutputTokens: 235929, + }, + { + id: 'qwen/qwen3.8-flash', + name: 'Qwen: Qwen3.8 Flash', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: true }, + prices: { currency: 'USD', input: 0.15, output: 0.47, cacheRead: 0.016 }, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'qwen/qwen3.8-max-0902', + name: 'Qwen: Qwen3.8 Max (0902)', + input: ['text', 'image', 'video'], + reasoning: { + levels: { + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { currency: 'USD', input: 2, output: 6, cacheRead: 0.25 }, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'qwen/qwen3.8-max-prime', + name: 'Qwen: Qwen3.8 Max Prime', + input: ['text', 'image', 'video'], + reasoning: { + levels: { + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + }, + budget: false, + }, + prices: { currency: 'USD', input: 4, output: 12, cacheRead: 0.5 }, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'qwen/qwen3.8-omni-flash', + name: 'Qwen: Qwen3.8 Omni Flash', + input: ['text', 'image', 'audio', 'video'], + reasoning: { levels: {}, budget: true }, + prices: { currency: 'USD', input: 0.15, output: 0.47, cacheRead: 0.016 }, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'recursive/flint-v1.0:free', + name: 'Recursive: Flint (free)', + input: ['text'], + reasoning: { levels: {}, budget: false }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'reflection/beam-1.0-501b-a23b', + name: 'Reflection: Beam 1.0 501B A23B', + input: ['text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.25, output: 1, cacheRead: 0.05 }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: 'rekaai/reka-edge', + name: 'Reka Edge', + input: ['image', 'text', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.1, output: 0.1 }, + contextWindow: 16384, + maxOutputTokens: 14745, + }, + { + id: 'rekaai/reka-flash-3', + name: 'Reka Flash 3', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.1, output: 0.2 }, + contextWindow: 65536, + maxOutputTokens: 58982, + }, + { + id: 'relace/relace-apply-3', + name: 'Relace: Relace Apply 3', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.85, output: 1.25 }, + contextWindow: 256000, + maxOutputTokens: 128000, + }, + { + id: 'relace/relace-search', + name: 'Relace: Relace Search', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 1, output: 3 }, + contextWindow: 256000, + maxOutputTokens: 128000, + }, + { + id: 'sakana/fugu-max', + name: 'Sakana: Fugu Max', + input: ['text', 'image', 'document'], + reasoning: { + levels: { max: 'max', xhigh: 'xhigh', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 2, output: 6, cacheRead: 0.25 }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'sakana/fugu-ultra', + name: 'Sakana: Fugu Ultra', + input: ['text', 'image'], + reasoning: { + levels: { max: 'max', xhigh: 'xhigh', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 30, + cacheRead: 0.5, + tiers: [ + { inputTokensAbove: 272000, input: 10, output: 45, cacheRead: 1 }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'sakana/fugu-ultra-v2', + name: 'Sakana: Fugu Ultra v2', + input: ['text', 'image', 'document'], + reasoning: { + levels: { max: 'max', xhigh: 'xhigh', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 30, + cacheRead: 0.5, + tiers: [ + { inputTokensAbove: 272000, input: 10, output: 45, cacheRead: 1 }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'sakana/sakana-namazu', + name: 'Sakana: Sakana Namazu', + input: ['text', 'image', 'document'], + reasoning: { levels: { high: 'high', off: 'none' }, budget: false }, + prices: { currency: 'USD', input: 0.95, output: 4, cacheRead: 0.15 }, + contextWindow: 262144, + maxOutputTokens: 65536, + }, + { + id: 'sao10k/l3-lunaris-8b', + name: 'Sao10K: Llama 3 8B Lunaris', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.04, output: 0.05 }, + contextWindow: 8192, + maxOutputTokens: 7372, + }, + { + id: 'sao10k/l3.1-euryale-70b', + name: 'Sao10K: Llama 3.1 Euryale 70B v2.2', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.85, output: 0.85 }, + contextWindow: 131072, + maxOutputTokens: 16384, + }, + { + id: 'scaledown/extract', + name: 'ScaleDown: Extract', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.04, output: 0 }, + contextWindow: 1000000, + maxOutputTokens: 900000, + }, + { + id: 'scaledown/summarize', + name: 'ScaleDown: Summarize', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.04, output: 0 }, + contextWindow: 1000000, + maxOutputTokens: 4000, + }, + { + id: 'stepfun/step-3.5-flash', + name: 'StepFun: Step 3.5 Flash', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.1, output: 0.3 }, + contextWindow: 262144, + maxOutputTokens: 65536, + }, + { + id: 'stepfun/step-3.7-flash', + name: 'StepFun: Step 3.7 Flash', + input: ['text', 'image', 'video'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.2, output: 1.15, cacheRead: 0.04 }, + contextWindow: 262144, + maxOutputTokens: 230400, + }, + { + id: 'stepfun/step-5-preview', + name: 'StepFun: Step 5 Preview', + input: ['text', 'image', 'video'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 1, output: 2.7, cacheRead: 0.1 }, + contextWindow: 1048576, + maxOutputTokens: 64000, + }, + { + id: 'tencent/hunyuan-a13b-instruct', + name: 'Tencent: Hunyuan A13B Instruct', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.14, output: 0.57 }, + contextWindow: 131072, + maxOutputTokens: 117964, + }, + { + id: 'tencent/hy-mt2-1.8b', + name: 'Tencent: Hy-MT2-1.8B', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.044, output: 0.177 }, + contextWindow: 8192, + maxOutputTokens: 4096, + }, + { + id: 'tencent/hy-mt2-30b-a3b', + name: 'Tencent: Hy-MT2-30B-A3B', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.074, output: 0.295 }, + contextWindow: 8192, + maxOutputTokens: 4096, + }, + { + id: 'tencent/hy-mt2-7b', + name: 'Tencent: Hy-MT2-7B', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.074, output: 0.295 }, + contextWindow: 8192, + maxOutputTokens: 4096, + }, + { + id: 'tencent/hy3', + name: 'Tencent: Hy3', + input: ['text'], + reasoning: { + levels: { high: 'high', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.132, output: 0.528, cacheRead: 0.033 }, + contextWindow: 262144, + maxOutputTokens: 128000, + }, + { + id: 'tencent/hy3-preview', + name: 'Tencent: Hy3 preview', + input: ['text'], + reasoning: { + levels: { high: 'high', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.18, output: 0.6, cacheRead: 0.06 }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'tencent/hy4-preview', + name: 'Tencent: Hy4 preview', + input: ['text'], + reasoning: { + levels: { high: 'high', low: 'low', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.834, output: 2.501, cacheRead: 0.042 }, + contextWindow: 1048576, + maxOutputTokens: 64000, + }, + { + id: 'thedrummer/cydonia-24b-v4.1', + name: 'TheDrummer: Cydonia 24B V4.1', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.3, output: 0.5, cacheRead: 0.15 }, + contextWindow: 131072, + maxOutputTokens: 117964, + }, + { + id: 'thedrummer/skyfall-36b-v2', + name: 'TheDrummer: Skyfall 36B V2', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.55, output: 0.8, cacheRead: 0.25 }, + contextWindow: 32768, + maxOutputTokens: 29491, + }, + { + id: 'thedrummer/unslopnemo-12b', + name: 'TheDrummer: UnslopNemo 12B', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.4, output: 0.4 }, + contextWindow: 1024000, + maxOutputTokens: 819200, + }, + { + id: 'thinkingmachines/inkling', + name: 'Thinking Machines: Inkling', + input: ['text', 'image', 'audio'], + reasoning: { + levels: { + max: 'max', + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + off: 'none', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1, output: 4.05, cacheRead: 0.17 }, + contextWindow: 524288, + maxOutputTokens: 471859, + }, + { + id: 'thinkingmachines/inkling-small', + name: 'Thinking Machines: Inkling Small', + input: ['text', 'image', 'audio'], + reasoning: { + levels: { + max: 'max', + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + off: 'none', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.45, output: 1.2, cacheRead: 0.1 }, + contextWindow: 524288, + maxOutputTokens: 262144, + }, + { + id: 'thinkingmachines/inkling-small:free', + name: 'Thinking Machines: Inkling Small (free)', + input: ['text', 'image', 'audio'], + reasoning: { + levels: { + max: 'max', + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + off: 'none', + }, + budget: false, + }, + contextWindow: 1048576, + maxOutputTokens: 262144, + }, + { + id: 'thinkingmachines/inkling:free', + name: 'Thinking Machines: Inkling (free)', + input: ['text', 'image', 'audio'], + reasoning: { + levels: { + max: 'max', + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + off: 'none', + }, + budget: false, + }, + contextWindow: 1048576, + maxOutputTokens: 262144, + }, + { + id: 'typesafe/jev-router', + name: 'TypeSafe: Jev Router', + input: ['audio', 'document', 'image', 'text', 'video'], + reasoning: { levels: {}, budget: false }, + contextWindow: 1000000, + maxOutputTokens: 65536, + }, + { + id: 'unbiased/pareto-26.10', + name: 'Pareto 26.10', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.8, output: 3.2, cacheRead: 0.03 }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: 'unbiased/pareto-26.9', + name: 'Pareto 26.9', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 2.5, output: 7.5, cacheRead: 0.25 }, + contextWindow: 262144, + maxOutputTokens: 131072, + }, + { + id: 'undi95/remm-slerp-l2-13b', + name: 'ReMM SLERP 13B', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.35, output: 0.65 }, + contextWindow: 6144, + maxOutputTokens: 5529, + }, + { + id: 'upstage/solar-mini4', + name: 'Upstage: Solar Mini 4', + input: ['text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + off: 'none', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.05, output: 0.2, cacheRead: 0.005 }, + contextWindow: 524288, + maxOutputTokens: 131072, + }, + { + id: 'upstage/solar-pro-3', + name: 'Upstage: Solar Pro 3', + input: ['text'], + reasoning: { + levels: { + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + off: 'none', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.15, output: 0.6, cacheRead: 0.015 }, + contextWindow: 131072, + maxOutputTokens: 117964, + }, + { + id: 'upstage/solar-pro4', + name: 'Upstage: Solar Pro 4', + input: ['text'], + reasoning: { + levels: { + max: 'max', + xhigh: 'xhigh', + high: 'high', + medium: 'medium', + low: 'low', + minimal: 'minimal', + off: 'none', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.15, output: 0.6, cacheRead: 0.03 }, + contextWindow: 524288, + maxOutputTokens: 131072, + }, + { + id: 'writer/palmyra-x5', + name: 'Writer: Palmyra X5', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.6, output: 6 }, + contextWindow: 1040000, + maxOutputTokens: 8192, + }, + { + id: 'x-ai/grok-4.20', + name: 'SpaceXAI: Grok 4.20', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 1.25, + output: 2.5, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 200000, input: 2.5, output: 5, cacheRead: 0.4 }, + ], + }, + contextWindow: 2000000, + maxOutputTokens: 1800000, + }, + { + id: 'x-ai/grok-4.20-multi-agent', + name: 'SpaceXAI: Grok 4.20 Multi-Agent', + input: ['text', 'image', 'document'], + reasoning: { + levels: { xhigh: 'xhigh', high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1.25, + output: 2.5, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 200000, input: 2.5, output: 5, cacheRead: 0.4 }, + ], + }, + contextWindow: 2000000, + maxOutputTokens: 1800000, + }, + { + id: 'x-ai/grok-4.3', + name: 'SpaceXAI: Grok 4.3', + input: ['text', 'image', 'document'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low', off: 'none' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1.25, + output: 2.5, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 200000, input: 2.5, output: 5, cacheRead: 0.4 }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 900000, + }, + { + id: 'x-ai/grok-4.3:batch', + name: 'SpaceXAI: Grok 4.3 (batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low', off: 'none' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 2, + cacheRead: 0.16, + tiers: [ + { inputTokensAbove: 200000, input: 2, output: 4, cacheRead: 0.32 }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 900000, + }, + { + id: 'x-ai/grok-4.5', + name: 'SpaceXAI: Grok 4.5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 6, + cacheRead: 0.3, + tiers: [ + { inputTokensAbove: 200000, input: 4, output: 12, cacheRead: 0.6 }, + ], + }, + contextWindow: 500000, + maxOutputTokens: 450000, + }, + { + id: 'x-ai/grok-4.6', + name: 'SpaceXAI: Grok 4.6', + input: ['text', 'image', 'document'], + reasoning: { + levels: { xhigh: 'xhigh', high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 6, + cacheRead: 0.5, + tiers: [{ inputTokensAbove: 200000, input: 4, output: 12, cacheRead: 1 }], + }, + contextWindow: 500000, + maxOutputTokens: 450000, + }, + { + id: 'x-ai/grok-4.7', + name: 'SpaceXAI: Grok 4.7', + input: ['text', 'image', 'document'], + reasoning: { + levels: { xhigh: 'xhigh', high: 'high', medium: 'medium', low: 'low' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 6, + cacheRead: 0.5, + tiers: [{ inputTokensAbove: 200000, input: 4, output: 12, cacheRead: 1 }], + }, + contextWindow: 500000, + maxOutputTokens: 450000, + }, + { + id: 'x-ai/grok-build-0.1', + name: 'SpaceXAI: Grok Build 0.1', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 1, + output: 2, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 200000, input: 2, output: 4, cacheRead: 0.4 }, + ], + }, + contextWindow: 256000, + maxOutputTokens: 230400, + }, + { + id: 'xiaomi/mimo-v2.5', + name: 'Xiaomi: MiMo-V2.5', + input: ['text', 'audio', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 0.119, + output: 0.238, + cacheRead: 0.00255, + }, + contextWindow: 1050000, + maxOutputTokens: 945000, + }, + { + id: 'xiaomi/mimo-v2.5-pro', + name: 'Xiaomi: MiMo-V2.5-Pro', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 0.3045, + output: 0.609, + cacheRead: 0.0028, + }, + contextWindow: 1050000, + maxOutputTokens: 945000, + }, + { + id: 'xiaomi/mimo-v2.6-flash', + name: 'Xiaomi: MiMo-V2.6-Flash', + input: ['text', 'image', 'video', 'audio'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.14, output: 0.28, cacheRead: 0.0028 }, + contextWindow: 1050000, + maxOutputTokens: 131072, + }, + { + id: 'xiaomi/mimo-v2.6-pro', + name: 'Xiaomi: MiMo-V2.6-Pro', + input: ['text', 'image', 'video', 'audio'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.435, output: 0.87, cacheRead: 0.0036 }, + contextWindow: 1050000, + maxOutputTokens: 131072, + }, + { + id: 'xiaomi/mimo-v2.6-pro-ultraspeed', + name: 'Xiaomi: MiMo-V2.6-Pro-UltraSpeed', + input: ['text', 'image', 'video', 'audio'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 4.35, output: 8.7, cacheRead: 0.036 }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: 'xingchen-agi/xing4.0-29b-a4b:free', + name: 'XingChen: Xing4.0 29B A4B (free)', + input: ['text'], + reasoning: { levels: {}, budget: false }, + contextWindow: 262144, + maxOutputTokens: 235929, + }, + { + id: 'z-ai/glm-4.5', + name: 'Z.ai: GLM 4.5', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.6, output: 2.2, cacheRead: 0.11 }, + contextWindow: 131072, + maxOutputTokens: 98304, + }, + { + id: 'z-ai/glm-4.5-air', + name: 'Z.ai: GLM 4.5 Air', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.13, output: 0.85, cacheRead: 0.025 }, + contextWindow: 131072, + maxOutputTokens: 98304, + }, + { + id: 'z-ai/glm-4.5v', + name: 'Z.ai: GLM 4.5V', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.6, output: 1.8, cacheRead: 0.11 }, + contextWindow: 65536, + maxOutputTokens: 16384, + }, + { + id: 'z-ai/glm-4.6', + name: 'Z.ai: GLM 4.6', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.55, output: 2.2, cacheRead: 0.11 }, + contextWindow: 204800, + maxOutputTokens: 131072, + }, + { + id: 'z-ai/glm-4.6v', + name: 'Z.ai: GLM 4.6V', + input: ['image', 'text', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.3, output: 0.9, cacheRead: 0.05 }, + contextWindow: 131072, + maxOutputTokens: 32768, + }, + { + id: 'z-ai/glm-4.7', + name: 'Z.ai: GLM 4.7', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.54, output: 1.98, cacheRead: 0.099 }, + contextWindow: 204800, + maxOutputTokens: 131072, + }, + { + id: 'z-ai/glm-4.7-flash', + name: 'Z.ai: GLM 4.7 Flash', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.0605, output: 0.4 }, + contextWindow: 200000, + maxOutputTokens: 117964, + }, + { + id: 'z-ai/glm-5', + name: 'Z.ai: GLM 5', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1, output: 3.2, cacheRead: 0.2 }, + contextWindow: 204800, + maxOutputTokens: 131072, + }, + { + id: 'z-ai/glm-5-turbo', + name: 'Z.ai: GLM 5 Turbo', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.2, output: 4, cacheRead: 0.24 }, + contextWindow: 202752, + maxOutputTokens: 131072, + }, + { + id: 'z-ai/glm-5.1', + name: 'Z.ai: GLM 5.1', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.4, output: 4.4, cacheRead: 0.26 }, + contextWindow: 204800, + maxOutputTokens: 131072, + }, + { + id: 'z-ai/glm-5.2', + name: 'Z.ai: GLM 5.2', + input: ['text'], + reasoning: { + levels: { xhigh: 'xhigh', high: 'high', off: 'none' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.0341, output: 7, cacheRead: 0.033 }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: 'z-ai/glm-5.3', + name: 'Z.ai: GLM 5.3', + input: ['text'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.0699, output: 1.4, cacheRead: 0.0689 }, + contextWindow: 1048576, + maxOutputTokens: 943718, + }, + { + id: 'z-ai/glm-5.3-flash', + name: 'Z.ai: GLM 5.3 Flash', + input: ['text', 'image', 'video'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.15, output: 0.5, cacheRead: 0.03 }, + contextWindow: 1048576, + maxOutputTokens: 943717, + }, + { + id: 'z-ai/glm-5.3-flash:batch', + name: 'Z.ai: GLM 5.3 Flash (batch)', + input: ['text', 'image', 'video'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.05, output: 0.18, cacheRead: 0.01 }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: 'z-ai/glm-5.3-flashx', + name: 'Z.ai: GLM 5.3 FlashX', + input: ['text', 'image', 'video'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.37, output: 1.25, cacheRead: 0.09 }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: 'z-ai/glm-5.3-prime', + name: 'Z.ai: GLM 5.3 Prime', + input: ['text'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 2.8, output: 8.8, cacheRead: 0.56 }, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'z-ai/glm-5.3:batch', + name: 'Z.ai: GLM 5.3 (batch)', + input: ['text'], + reasoning: { + levels: { max: 'max', high: 'high', low: 'low' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.45, output: 2, cacheRead: 0.1 }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: 'z-ai/glm-5v-turbo', + name: 'Z.ai: GLM 5V Turbo', + input: ['image', 'text', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 1.2, output: 4, cacheRead: 0.24 }, + contextWindow: 202752, + maxOutputTokens: 131072, + }, +] diff --git a/packages/ai-openrouter/vite.config.ts b/packages/ai-openrouter/vite.config.ts index df63406fd7..b8446a8715 100644 --- a/packages/ai-openrouter/vite.config.ts +++ b/packages/ai-openrouter/vite.config.ts @@ -31,6 +31,7 @@ export default mergeConfig( tanstackViteConfig({ entry: [ './src/index.ts', + './src/models.ts', './src/byok.ts', './src/model-meta.ts', './src/tools/index.ts', diff --git a/packages/ai-vercel-gateway/package.json b/packages/ai-vercel-gateway/package.json index 8632edd103..76284e58a4 100644 --- a/packages/ai-vercel-gateway/package.json +++ b/packages/ai-vercel-gateway/package.json @@ -32,6 +32,10 @@ "./tools": { "types": "./dist/esm/tools/index.d.ts", "import": "./dist/esm/tools/index.js" + }, + "./models": { + "types": "./dist/esm/models.d.ts", + "import": "./dist/esm/models.js" } }, "files": [ diff --git a/packages/ai-vercel-gateway/src/models.ts b/packages/ai-vercel-gateway/src/models.ts new file mode 100644 index 0000000000..54dfbebb68 --- /dev/null +++ b/packages/ai-vercel-gateway/src/models.ts @@ -0,0 +1,5026 @@ +// Generated by scripts/sync-model-catalogs.ts from modelschemas. Do not edit. +import type { ModelRecord } from '@tanstack/ai' + +/** Every Vercel AI Gateway chat model on modelschemas.com, sorted by id. */ +export const models: ReadonlyArray = [ + { + id: 'alibaba/qwen-3-14b', + name: 'Qwen3-14B', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.12, output: 0.24 }, + contextWindow: 40960, + maxOutputTokens: 16384, + }, + { + id: 'alibaba/qwen-3-235b', + name: 'Qwen3 235B A22B', + input: ['text'], + reasoning: false, + contextWindow: 262144, + maxOutputTokens: 16384, + }, + { + id: 'alibaba/qwen-3-30b', + name: 'Qwen3-30B-A3B', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.12, output: 0.5 }, + contextWindow: 40960, + maxOutputTokens: 16384, + }, + { + id: 'alibaba/qwen-3-32b', + name: 'Qwen 3 32B', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 128000, + maxOutputTokens: 8192, + }, + { + id: 'alibaba/qwen3-coder', + name: 'Qwen3 Coder 480B A35B Instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.22, output: 1.8, cacheRead: 0.022 }, + contextWindow: 262144, + maxOutputTokens: 32768, + }, + { + id: 'alibaba/qwen3-coder-30b-a3b', + name: 'Qwen 3 Coder 30B A3B Instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.6 }, + contextWindow: 262144, + maxOutputTokens: 8192, + }, + { + id: 'alibaba/qwen3-coder-next', + name: 'Qwen3 Coder Next', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.5, output: 1.2 }, + contextWindow: 256000, + maxOutputTokens: 256000, + }, + { + id: 'alibaba/qwen3-max-thinking', + name: 'Qwen 3 Max Thinking', + input: ['text'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 1.2, + output: 6, + cacheRead: 0.24, + tiers: [ + { inputTokensAbove: 32000, input: 2.4, output: 12, cacheRead: 0.48 }, + { inputTokensAbove: 128000, input: 3, output: 15, cacheRead: 0.6 }, + ], + }, + contextWindow: 256000, + maxOutputTokens: 65536, + }, + { + id: 'alibaba/qwen3-next-80b-a3b-instruct', + name: 'Qwen3 Next 80B A3B Instruct', + input: ['text'], + reasoning: false, + contextWindow: 262114, + maxOutputTokens: 262114, + }, + { + id: 'alibaba/qwen3-next-80b-a3b-thinking', + name: 'Qwen3 Next 80B A3B Thinking', + input: ['text'], + reasoning: { levels: {}, budget: true }, + prices: { currency: 'USD', input: 0.15, output: 1.2 }, + contextWindow: 262144, + maxOutputTokens: 262144, + }, + { + id: 'alibaba/qwen3-vl-instruct', + name: 'Qwen3 VL 235B A22B Instruct', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.2, output: 0.88, cacheRead: 0.11 }, + contextWindow: 262144, + maxOutputTokens: 262144, + }, + { + id: 'alibaba/qwen3.5-flash', + name: 'Qwen 3.5 Flash', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.1, + output: 0.4, + cacheRead: 0.01, + cacheWrite: 0.125, + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'alibaba/qwen3.5-plus', + name: 'Qwen 3.5 Plus', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.4, + output: 2.4, + cacheRead: 0.04, + cacheWrite: 0.5, + tiers: [ + { + inputTokensAbove: 256000, + input: 0.5, + output: 3, + cacheRead: 0.05, + cacheWrite: 0.625, + }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'alibaba/qwen3.6-27b', + name: 'Qwen 3.6 27B', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: true }, + prices: { currency: 'USD', input: 0.6, output: 3.6 }, + contextWindow: 256000, + maxOutputTokens: 256000, + }, + { + id: 'alibaba/qwen3.6-plus', + name: 'Qwen 3.6 Plus', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.5, + output: 3, + cacheRead: 0.05, + cacheWrite: 0.625, + tiers: [ + { + inputTokensAbove: 255999, + input: 2, + output: 6, + cacheRead: 0.2, + cacheWrite: 2.5, + }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'alibaba/qwen3.7-flash', + name: 'Qwen 3.7 Flash', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.03, + output: 0.13, + cacheRead: 0.006, + cacheWrite: 0.038, + tiers: [ + { + inputTokensAbove: 31999, + input: 0.1, + output: 0.4, + cacheRead: 0.02, + cacheWrite: 0.125, + }, + { + inputTokensAbove: 255999, + input: 0.2, + output: 0.8, + cacheRead: 0.04, + cacheWrite: 0.25, + }, + ], + }, + contextWindow: 991000, + maxOutputTokens: 64000, + }, + { + id: 'alibaba/qwen3.7-max', + name: 'Qwen 3.7 Max', + input: ['text'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.5, + output: 7.5, + cacheRead: 0.5, + cacheWrite: 3.125, + }, + contextWindow: 991000, + maxOutputTokens: 64000, + }, + { + id: 'alibaba/qwen3.7-plus', + name: 'Qwen 3.7 Plus', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.4, + output: 1.6, + cacheRead: 0.08, + cacheWrite: 0.5, + tiers: [ + { + inputTokensAbove: 255999, + input: 1.2, + output: 4.8, + cacheRead: 0.24, + cacheWrite: 1.5, + }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'alibaba/qwen3.8-2.4t-a95b', + name: 'Qwen3.8 2.4T A95B', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', xhigh: 'xhigh' }, + budget: false, + }, + contextWindow: 262144, + maxOutputTokens: 128000, + }, + { + id: 'alibaba/qwen3.8-27b', + name: 'Qwen3.8 27B', + input: ['text', 'image', 'document', 'video'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', xhigh: 'xhigh' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'alibaba/qwen3.8-flash', + name: 'Qwen 3.8 Flash', + input: ['text', 'image', 'document'], + reasoning: { + levels: { low: 'low', medium: 'medium', xhigh: 'xhigh' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.15, + output: 0.47, + cacheRead: 0.016, + cacheWrite: 0.2, + }, + contextWindow: 991000, + maxOutputTokens: 128000, + }, + { + id: 'alibaba/qwen3.8-max', + name: 'Qwen 3.8 Max', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', xhigh: 'xhigh' }, + budget: false, + }, + prices: { currency: 'USD', input: 2, output: 6, cacheRead: 0.25 }, + contextWindow: 262144, + maxOutputTokens: 128000, + }, + { + id: 'alibaba/qwen3.8-max-0902', + name: 'Qwen3.8 Max 0902', + input: ['text', 'image', 'document'], + reasoning: { + levels: { low: 'low', medium: 'medium', xhigh: 'xhigh' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 6, + cacheRead: 0.25, + cacheWrite: 2.5, + }, + contextWindow: 991000, + maxOutputTokens: 128000, + }, + { + id: 'alibaba/qwen3.8-max-prime', + name: 'Qwen 3.8 Max Prime', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', xhigh: 'xhigh' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 4, + output: 12, + cacheRead: 0.5, + cacheWrite: 5, + }, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'alibaba/qwen3.8-omni-flash', + name: 'Qwen 3.8 Omni Flash', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', xhigh: 'xhigh' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.15, output: 0.47, cacheRead: 0.016 }, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'amazon/nova-2-lite', + name: 'Nova 2 Lite', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.33, output: 2.75, cacheRead: 0.0825 }, + contextWindow: 1000000, + maxOutputTokens: 1000000, + }, + { + id: 'amazon/nova-lite', + name: 'Nova Lite', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.06, output: 0.24, cacheRead: 0.015 }, + contextWindow: 300000, + maxOutputTokens: 8192, + }, + { + id: 'amazon/nova-micro', + name: 'Nova Micro', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.035, output: 0.14, cacheRead: 0.0087 }, + contextWindow: 128000, + maxOutputTokens: 8192, + }, + { + id: 'amazon/nova-pro', + name: 'Nova Pro', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.8, output: 3.2, cacheRead: 0.2 }, + contextWindow: 300000, + maxOutputTokens: 8192, + }, + { + id: 'anthropic/claude-fable-5', + name: 'Claude Fable 5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 1, + cacheWrite: 12.5, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-fable-5-batch', + name: 'Claude Fable 5 (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-fable-5.1', + name: 'Claude Fable 5.1', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 0.25, + cacheWrite: 12.5, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-fable-5.1-batch', + name: 'Claude Fable 5.1 (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.125, + cacheWrite: 6.25, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-haiku-4.5', + name: 'Claude Haiku 4.5', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 1, + output: 5, + cacheRead: 0.1, + cacheWrite: 1.25, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'anthropic/claude-haiku-4.5-batch', + name: 'Claude Haiku 4.5 (Batch)', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 0.5, + output: 2.5, + cacheRead: 0.05, + cacheWrite: 0.625, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'anthropic/claude-haiku-5.5', + name: 'Claude Haiku 5.5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.1, + output: 0.5, + cacheRead: 0.01, + cacheWrite: 0.125, + tiers: [ + { + inputTokensAbove: 100000, + input: 0.5, + output: 2.5, + cacheRead: 0.05, + cacheWrite: 0.625, + }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-haiku-5.5-batch', + name: 'Claude Haiku 5.5 (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.05, + output: 0.25, + cacheRead: 0.005, + cacheWrite: 0.0625, + tiers: [ + { + inputTokensAbove: 100000, + input: 0.25, + output: 1.25, + cacheRead: 0.025, + cacheWrite: 0.3125, + }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-4.5', + name: 'Claude Opus 4.5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'anthropic/claude-opus-4.5-batch', + name: 'Claude Opus 4.5 (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.5, + output: 12.5, + cacheRead: 0.25, + cacheWrite: 3.125, + }, + contextWindow: 200000, + maxOutputTokens: 64000, + }, + { + id: 'anthropic/claude-opus-4.6', + name: 'Claude Opus 4.6', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-4.6-batch', + name: 'Claude Opus 4.6 (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.5, + output: 12.5, + cacheRead: 0.25, + cacheWrite: 3.125, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-4.7', + name: 'Claude Opus 4.7', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-4.7-batch', + name: 'Claude Opus 4.7 (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.5, + output: 12.5, + cacheRead: 0.25, + cacheWrite: 3.125, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-4.8', + name: 'Claude Opus 4.8', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-4.8-batch', + name: 'Claude Opus 4.8 (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.5, + output: 12.5, + cacheRead: 0.25, + cacheWrite: 3.125, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-4.8-fast', + name: 'Claude Opus 4.8 (Fast)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 1, + cacheWrite: 12.5, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-5', + name: 'Claude Opus 5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-5-batch', + name: 'Claude Opus 5 (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.5, + output: 12.5, + cacheRead: 0.25, + cacheWrite: 3.125, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-5-fast', + name: 'Claude Opus 5 (Fast)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 1, + cacheWrite: 12.5, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-5.5', + name: 'Claude Opus 5.5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 4, + output: 20, + cacheRead: 0.2, + cacheWrite: 5, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-5.5-batch', + name: 'Claude Opus 5.5 (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.1, + cacheWrite: 2.5, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-opus-5.5-fast', + name: 'Claude Opus 5.5 (Fast)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 8, + output: 40, + cacheRead: 0.4, + cacheWrite: 10, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-sonnet-4.5', + name: 'Claude Sonnet 4.5', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + tiers: [ + { + inputTokensAbove: 200000, + input: 6, + output: 22.5, + cacheRead: 0.6, + cacheWrite: 7.5, + }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'anthropic/claude-sonnet-4.5-batch', + name: 'Claude Sonnet 4.5 (Batch)', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 1.5, + output: 7.5, + cacheRead: 0.15, + cacheWrite: 1.875, + tiers: [ + { + inputTokensAbove: 200000, + input: 3, + output: 11.25, + cacheRead: 0.3, + cacheWrite: 3.75, + }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'anthropic/claude-sonnet-4.6', + name: 'Claude Sonnet 4.6', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-sonnet-4.6-batch', + name: 'Claude Sonnet 4.6 (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1.5, + output: 7.5, + cacheRead: 0.15, + cacheWrite: 1.875, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-sonnet-5', + name: 'Claude Sonnet 5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.2, + cacheWrite: 2.5, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-sonnet-5-batch', + name: 'Claude Sonnet 5 (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 5, + cacheRead: 0.1, + cacheWrite: 1.25, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-sonnet-5.5', + name: 'Claude Sonnet 5.5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.1, + cacheWrite: 2.5, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'anthropic/claude-sonnet-5.5-batch', + name: 'Claude Sonnet 5.5 (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 5, + cacheRead: 0.05, + cacheWrite: 1.25, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'arcee-ai/trinity-large-thinking', + name: 'Trinity Large Thinking', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.25, output: 0.8, cacheRead: 0.06 }, + contextWindow: 262100, + maxOutputTokens: 80000, + }, + { + id: 'bytedance/seed-1.6', + name: 'Seed 1.6', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 0.25, + output: 2, + cacheRead: 0.05, + tiers: [ + { inputTokensAbove: 128000, input: 0.5, output: 4, cacheRead: 0.05 }, + ], + }, + contextWindow: 256000, + maxOutputTokens: 32000, + }, + { + id: 'bytedance/seed-1.8', + name: 'Bytedance Seed 1.8', + input: ['text', 'image'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.25, + output: 2, + cacheRead: 0.05, + tiers: [ + { inputTokensAbove: 128000, input: 0.5, output: 4, cacheRead: 0.05 }, + ], + }, + contextWindow: 256000, + maxOutputTokens: 64000, + }, + { + id: 'bytedance/seed-2.1-turbo', + name: 'Seed 2.1 Turbo', + input: ['text', 'image', 'video'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.5, output: 2.5, cacheRead: 0.1 }, + contextWindow: 262144, + maxOutputTokens: 262144, + }, + { + id: 'callstack/apex', + name: 'Apex', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', xhigh: 'xhigh' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.5, output: 3, cacheRead: 0.2 }, + contextWindow: 262144, + maxOutputTokens: 131072, + }, + { + id: 'cohere/command-a', + name: 'Command A', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 2.5, output: 10 }, + contextWindow: 256000, + maxOutputTokens: 8000, + }, + { + id: 'deepseek/deepseek-r1', + name: 'DeepSeek-R1', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 128000, + maxOutputTokens: 8192, + }, + { + id: 'deepseek/deepseek-v3.1', + name: 'DeepSeek V3.1', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 163840, + maxOutputTokens: 128000, + }, + { + id: 'deepseek/deepseek-v3.2', + name: 'DeepSeek V3.2', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 128000, + maxOutputTokens: 8000, + }, + { + id: 'deepseek/deepseek-v3.2-thinking', + name: 'DeepSeek V3.2 Thinking', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 128000, + maxOutputTokens: 8000, + }, + { + id: 'deepseek/deepseek-v4-flash', + name: 'DeepSeek V4 Flash', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 384000, + }, + { + id: 'deepseek/deepseek-v4-flash-0731', + name: 'DeepSeek V4 Flash 0731', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 384000, + }, + { + id: 'deepseek/deepseek-v4-flash-vision-exp', + name: 'DeepSeek V4 Flash Vision Exp', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 1048576, + maxOutputTokens: 1048576, + }, + { + id: 'deepseek/deepseek-v4-pro', + name: 'DeepSeek V4 Pro', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', high: 'high', max: 'max' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 384000, + }, + { + id: 'deepseek/deepseek-v4-pro-0813', + name: 'DeepSeek V4 Pro 0813', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', high: 'high', max: 'max' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 384000, + }, + { + id: 'deepseek/deepseek-v4.1-flash', + name: 'DeepSeek V4.1 Flash', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', high: 'high', max: 'max' }, + budget: false, + }, + contextWindow: 1048576, + maxOutputTokens: 32768, + }, + { + id: 'deepseek/deepseek-v4.1-flash-1017', + name: 'DeepSeek V4.1 Flash 1017', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', high: 'high', max: 'max' }, + budget: false, + }, + contextWindow: 1048576, + maxOutputTokens: 1048576, + }, + { + id: 'deepseek/deepseek-v4.1-flash-1017-fast', + name: 'DeepSeek V4.1 Flash 1017 Fast', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.6, output: 2.4, cacheRead: 0.014 }, + contextWindow: 1048576, + maxOutputTokens: 262144, + }, + { + id: 'deepseek/deepseek-v4.1-flash-fast', + name: 'DeepSeek V4.1 Flash Fast', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.6, output: 2.4, cacheRead: 0.014 }, + contextWindow: 1048576, + maxOutputTokens: 32768, + }, + { + id: 'elorian/glimpse', + name: 'Glimpse', + input: ['text', 'image', 'video'], + reasoning: { + levels: { low: 'low', medium: 'medium', xhigh: 'xhigh' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.6, output: 3, cacheRead: 0.06 }, + contextWindow: 220000, + maxOutputTokens: 4096, + }, + { + id: 'fireworks/ember-1', + name: 'Ember-1', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 3, output: 15, cacheRead: 0.3 }, + contextWindow: 1048576, + maxOutputTokens: 1048576, + }, + { + id: 'google/gemini-2.5-flash', + name: 'Gemini 2.5 Flash', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.3, output: 2.5, cacheRead: 0.03 }, + contextWindow: 1000000, + maxOutputTokens: 65535, + }, + { + id: 'google/gemini-2.5-flash-batch', + name: 'Gemini 2.5 Flash (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.15, output: 1.25, cacheRead: 0.03 }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'google/gemini-2.5-flash-image', + name: 'Nano Banana (Gemini 2.5 Flash Image)', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.3, output: 2.5, cacheRead: 0.03 }, + contextWindow: 32768, + maxOutputTokens: 65535, + }, + { + id: 'google/gemini-2.5-flash-lite', + name: 'Gemini 2.5 Flash Lite', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.1, output: 0.4, cacheRead: 0.01 }, + contextWindow: 1048576, + maxOutputTokens: 65535, + }, + { + id: 'google/gemini-2.5-flash-lite-batch', + name: 'Gemini 2.5 Flash Lite (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.05, output: 0.2, cacheRead: 0.01 }, + contextWindow: 1048576, + maxOutputTokens: 65535, + }, + { + id: 'google/gemini-2.5-pro', + name: 'Gemini 2.5 Pro', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1.25, + output: 10, + cacheRead: 0.125, + tiers: [ + { inputTokensAbove: 200000, input: 2.5, output: 15, cacheRead: 0.25 }, + ], + }, + contextWindow: 1048576, + maxOutputTokens: 65535, + }, + { + id: 'google/gemini-2.5-pro-batch', + name: 'Gemini 2.5 Pro (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.625, + output: 5, + cacheRead: 0.125, + tiers: [ + { inputTokensAbove: 200000, input: 1.25, output: 7.5, cacheRead: 0.25 }, + ], + }, + contextWindow: 1048576, + maxOutputTokens: 65535, + }, + { + id: 'google/gemini-3-flash', + name: 'Gemini 3 Flash', + input: ['text', 'image', 'document'], + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { + currency: 'USD', + input: 0.5, + output: 3, + cacheRead: 0.05, + tiers: [ + { inputTokensAbove: 200000, input: 0.5, output: 3, cacheRead: 0.05 }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 65000, + }, + { + id: 'google/gemini-3-flash-batch', + name: 'Gemini 3 Flash (Batch)', + input: ['text', 'image', 'document'], + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { + currency: 'USD', + input: 0.25, + output: 1.5, + cacheRead: 0.05, + tiers: [ + { inputTokensAbove: 200000, input: 0.25, output: 1.5, cacheRead: 0.05 }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'google/gemini-3-pro-image', + name: 'Nano Banana Pro (Gemini 3 Pro Image)', + input: ['text', 'image'], + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 2, output: 12, cacheRead: 0.2 }, + contextWindow: 65536, + maxOutputTokens: 32768, + }, + { + id: 'google/gemini-3.1-flash-image', + name: 'Gemini 3.1 Flash Image (Nano Banana 2)', + input: ['text', 'image'], + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 0.5, output: 3, cacheRead: 0.05 }, + contextWindow: 131072, + maxOutputTokens: 32768, + }, + { + id: 'google/gemini-3.1-flash-image-preview', + name: 'Gemini 3.1 Flash Image Preview (Nano Banana 2)', + input: ['text', 'image'], + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 0.5, output: 3, cacheRead: 0.05 }, + contextWindow: 131072, + maxOutputTokens: 32768, + }, + { + id: 'google/gemini-3.1-flash-lite', + name: 'Gemini 3.1 Flash Lite', + input: ['text', 'image', 'document'], + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 0.25, output: 1.5, cacheRead: 0.03 }, + contextWindow: 1000000, + maxOutputTokens: 65000, + }, + { + id: 'google/gemini-3.1-flash-lite-batch', + name: 'Gemini 3.1 Flash Lite (Batch)', + input: ['text', 'image', 'document'], + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 0.125, output: 0.75, cacheRead: 0.015 }, + contextWindow: 1000000, + maxOutputTokens: 65000, + }, + { + id: 'google/gemini-3.1-flash-lite-image', + name: 'Gemini 3.1 Flash Lite Image (Nano Banana 2 Lite)', + input: ['text', 'image'], + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 0.25, output: 1.5, cacheRead: 0.03 }, + contextWindow: 65536, + maxOutputTokens: 4096, + }, + { + id: 'google/gemini-3.1-pro-preview', + name: 'Gemini 3.1 Pro Preview', + input: ['text', 'image', 'document'], + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { + currency: 'USD', + input: 2, + output: 12, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 200000, input: 4, output: 18, cacheRead: 0.4 }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'google/gemini-3.1-pro-preview-batch', + name: 'Gemini 3.1 Pro Preview (Batch)', + input: ['text', 'image', 'document'], + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { + currency: 'USD', + input: 1, + output: 6, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 200000, input: 2, output: 9, cacheRead: 0.4 }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'google/gemini-3.5-flash', + name: 'Gemini 3.5 Flash', + input: ['text', 'image', 'document', 'video'], + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 1.5, output: 9, cacheRead: 0.15 }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'google/gemini-3.5-flash-batch', + name: 'Gemini 3.5 Flash (Batch)', + input: ['text', 'image', 'document', 'video'], + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 0.75, output: 4.5, cacheRead: 0.075 }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'google/gemini-3.5-flash-lite', + name: 'Gemini 3.5 Flash Lite', + input: ['text', 'image', 'document', 'video'], + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 0.3, output: 2.5, cacheRead: 0.03 }, + contextWindow: 1000000, + maxOutputTokens: 65000, + }, + { + id: 'google/gemini-3.5-flash-lite-batch', + name: 'Gemini 3.5 Flash Lite (Batch)', + input: ['text', 'image', 'document', 'video'], + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 0.15, output: 1.25, cacheRead: 0.015 }, + contextWindow: 1000000, + maxOutputTokens: 65000, + }, + { + id: 'google/gemini-3.6-flash', + name: 'Gemini 3.6 Flash', + input: ['text', 'image', 'document', 'video'], + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 0.75, output: 3.75, cacheRead: 0.075 }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'google/gemini-3.6-flash-batch', + name: 'Gemini 3.6 Flash (Batch)', + input: ['text', 'image', 'document', 'video'], + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 0.375, output: 1.875, cacheRead: 0.0375 }, + contextWindow: 1000000, + maxOutputTokens: 64000, + }, + { + id: 'google/gemini-3.7-flash', + name: 'Gemini 3.7 Flash', + input: ['text', 'image', 'document', 'video'], + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 0.75, output: 3.75, cacheRead: 0.075 }, + contextWindow: 1000000, + maxOutputTokens: 65535, + }, + { + id: 'google/gemini-3.7-flash-batch', + name: 'Gemini 3.7 Flash (Batch)', + input: ['text', 'image', 'document', 'video'], + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 0.375, output: 1.875, cacheRead: 0.0375 }, + contextWindow: 1000000, + maxOutputTokens: 65535, + }, + { + id: 'google/gemini-3.8-flash', + name: 'Gemini 3.8 Flash', + input: ['text', 'image', 'document', 'video'], + reasoning: { levels: { low: 'low', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 0.75, output: 3.75, cacheRead: 0.075 }, + contextWindow: 1000000, + maxOutputTokens: 65535, + }, + { + id: 'google/gemini-4-argon', + name: 'Gemini 4 Argon', + input: ['text', 'image', 'document', 'video'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 2, output: 10, cacheRead: 0.1 }, + contextWindow: 1000000, + maxOutputTokens: 1000000, + }, + { + id: 'google/gemini-nano-banana-2.1', + name: 'Gemini Nano Banana 2.1', + input: ['text', 'image'], + reasoning: { + levels: { minimal: 'minimal', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.5, output: 7.5, cacheRead: 0.15 }, + contextWindow: 131072, + maxOutputTokens: 32768, + }, + { + id: 'google/gemini-omni-flash-preview', + name: 'Gemini Omni Flash Preview', + input: ['text', 'image', 'document', 'video'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.5, output: 9 }, + contextWindow: 1000000, + maxOutputTokens: 57920, + }, + { + id: 'google/gemma-4-26b-a4b-it', + name: 'Google Gemma 4 26B A4B', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + contextWindow: 262144, + maxOutputTokens: 131072, + }, + { + id: 'google/gemma-4-31b-it', + name: 'Gemma 4 31B IT', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: false }, + contextWindow: 262144, + maxOutputTokens: 131072, + }, + { + id: 'inception/mercury-2', + name: 'Mercury 2', + input: ['text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.25, output: 0.75, cacheRead: 0.025 }, + contextWindow: 128000, + maxOutputTokens: 128000, + }, + { + id: 'inception/mercury-2.5', + name: 'Mercury 2.5', + input: ['text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.04, output: 0.15, cacheRead: 0.004 }, + contextWindow: 260000, + maxOutputTokens: 65536, + }, + { + id: 'inception/mercury-3', + name: 'Mercury 3', + input: ['text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.1, output: 0.35, cacheRead: 0.01 }, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'inception/mercury-coder-small', + name: 'Mercury Coder Small Beta', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.25, output: 1 }, + contextWindow: 32000, + maxOutputTokens: 16384, + }, + { + id: 'inclusionai/ling-3.0-flash', + name: 'Ling 3.0 Flash', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.021, output: 0.063, cacheRead: 0.0042 }, + contextWindow: 256000, + maxOutputTokens: 32000, + }, + { + id: 'inclusionai/ling-3.0-flash-fin', + name: 'Ling 3.0 Flash Fin', + input: ['text'], + reasoning: { levels: {}, budget: false }, + contextWindow: 256000, + maxOutputTokens: 32000, + }, + { + id: 'inclusionai/ling-3.0-flash-sante', + name: 'Ling 3.0 Flash Sante', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.075, output: 0.22, cacheRead: 0.015 }, + contextWindow: 256000, + maxOutputTokens: 32000, + }, + { + id: 'inclusionai/ling-3.0-flash-vl', + name: 'Ling 3.0 Flash VL', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.075, output: 0.22, cacheRead: 0.015 }, + contextWindow: 256000, + maxOutputTokens: 32000, + }, + { + id: 'inclusionai/ling-3.1-flash', + name: 'Ling 3.1 Flash', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.3, output: 0.9, cacheRead: 0.06 }, + contextWindow: 262144, + maxOutputTokens: 32768, + }, + { + id: 'inference-net/schematron-v2-small', + name: 'Schematron V2 Small', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.05, output: 0.23, cacheRead: 0.05 }, + contextWindow: 128000, + maxOutputTokens: 4096, + }, + { + id: 'inference-net/schematron-v2-turbo', + name: 'Schematron V2 Turbo', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.03, output: 0.15, cacheRead: 0.03 }, + contextWindow: 128000, + maxOutputTokens: 8192, + }, + { + id: 'interfaze/interfaze-beta', + name: 'Interfaze Beta', + input: ['text', 'image', 'document'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.5, output: 3.5 }, + contextWindow: 1000000, + maxOutputTokens: 32000, + }, + { + id: 'liquid/lfm2.5-24b-a2b', + name: 'LFM2.5-24B-A2B', + input: ['text'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.05, output: 0.7, cacheRead: 0.025 }, + contextWindow: 128000, + maxOutputTokens: 8200, + }, + { + id: 'meituan/longcat-2.5-preview', + name: 'LongCat 2.5 Preview', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.3, output: 1.2, cacheRead: 0.006 }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: 'meta/llama-3.1-70b', + name: 'Llama 3.1 70B Instruct', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.72, output: 0.72 }, + contextWindow: 128000, + maxOutputTokens: 8192, + }, + { + id: 'meta/llama-3.1-8b', + name: 'Llama 3.1 8B Instruct', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 128000, + maxOutputTokens: 8192, + }, + { + id: 'meta/llama-3.3-70b', + name: 'Llama 3.3 70B Instruct', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.72, output: 0.72 }, + contextWindow: 128000, + maxOutputTokens: 8192, + }, + { + id: 'meta/llama-4-maverick', + name: 'Llama 4 Maverick 17B Instruct', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.24, output: 0.97 }, + contextWindow: 128000, + maxOutputTokens: 8192, + }, + { + id: 'meta/llama-4-scout', + name: 'Llama 4 Scout 17B Instruct', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 128000, + maxOutputTokens: 8192, + }, + { + id: 'meta/muse-glimmer-30b', + name: 'Muse Glimmer 30B', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.35, output: 1.5, cacheRead: 0.04 }, + contextWindow: 131072, + maxOutputTokens: 131072, + }, + { + id: 'meta/muse-spark-1.1', + name: 'Muse Spark 1.1', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 4.25, cacheRead: 0.15 }, + contextWindow: 1048576, + maxOutputTokens: 1048576, + }, + { + id: 'meta/muse-spark-1.2', + name: 'Muse Spark 1.2', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 4.25, cacheRead: 0.15 }, + contextWindow: 1048576, + maxOutputTokens: 1048576, + }, + { + id: 'meta/muse-spark-1.2-contributor', + name: 'Muse Spark 1.2 Contributor', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.1, output: 0.2, cacheRead: 0.002 }, + contextWindow: 1048576, + maxOutputTokens: 1048576, + }, + { + id: 'meta/muse-spark-1.3', + name: 'Muse Spark 1.3', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 4.25, cacheRead: 0.15 }, + contextWindow: 1048576, + maxOutputTokens: 1048576, + }, + { + id: 'meta/muse-spark-1.3-contributor', + name: 'Muse Spark 1.3 Contributor', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.1, output: 0.2, cacheRead: 0.002 }, + contextWindow: 1048576, + maxOutputTokens: 1048576, + }, + { + id: 'meta/muse-spark-open', + name: 'Muse Spark Open', + input: ['text', 'audio', 'image', 'video'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 4.25, cacheRead: 0.15 }, + contextWindow: 1048576, + maxOutputTokens: 1048576, + }, + { + id: 'meta/muse-wonder-1.0', + name: 'Muse Wonder', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { currency: 'USD', input: 4, output: 20, cacheRead: 0.2 }, + contextWindow: 1048576, + maxOutputTokens: 1048576, + }, + { + id: 'minimax/minimax-m2', + name: 'MiniMax M2', + input: ['text'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 0.3, + output: 1.2, + cacheRead: 0.03, + cacheWrite: 0.375, + }, + contextWindow: 205000, + maxOutputTokens: 205000, + }, + { + id: 'minimax/minimax-m2.1', + name: 'MiniMax M2.1', + input: ['text'], + reasoning: { levels: {}, budget: true }, + contextWindow: 204800, + maxOutputTokens: 131072, + }, + { + id: 'minimax/minimax-m2.1-lightning', + name: 'MiniMax M2.1 Lightning', + input: ['text'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 0.3, + output: 2.4, + cacheRead: 0.03, + cacheWrite: 0.375, + }, + contextWindow: 204800, + maxOutputTokens: 131072, + }, + { + id: 'minimax/minimax-m2.5', + name: 'MiniMax M2.5', + input: ['text'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 0.3, + output: 1.2, + cacheRead: 0.03, + cacheWrite: 0.375, + }, + contextWindow: 204800, + maxOutputTokens: 131000, + }, + { + id: 'minimax/minimax-m2.5-highspeed', + name: 'MiniMax M2.5 High Speed', + input: ['text'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 0.6, + output: 2.4, + cacheRead: 0.03, + cacheWrite: 0.375, + }, + contextWindow: 204800, + maxOutputTokens: 131000, + }, + { + id: 'minimax/minimax-m2.7', + name: 'MiniMax M2.7', + input: ['text'], + reasoning: { levels: {}, budget: true }, + contextWindow: 204800, + maxOutputTokens: 131000, + }, + { + id: 'minimax/minimax-m2.7-highspeed', + name: 'MiniMax M2.7 High Speed', + input: ['text'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 0.6, + output: 2.4, + cacheRead: 0.06, + cacheWrite: 0.375, + }, + contextWindow: 204800, + maxOutputTokens: 131100, + }, + { + id: 'minimax/minimax-m3', + name: 'MiniMax M3', + input: ['text', 'image', 'document'], + reasoning: { levels: {}, budget: true }, + contextWindow: 512000, + maxOutputTokens: 512000, + }, + { + id: 'minimax/minimax-m3.1-flash', + name: 'MiniMax-M3.1-Flash', + input: ['text', 'image'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1048576, + maxOutputTokens: 1048576, + }, + { + id: 'mistral/codestral', + name: 'Mistral Codestral', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.3, output: 0.9, cacheRead: 0.03 }, + contextWindow: 128000, + maxOutputTokens: 4000, + }, + { + id: 'mistral/ministral-14b', + name: 'Ministral 14B', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.2, output: 0.2, cacheRead: 0.02 }, + contextWindow: 262144, + maxOutputTokens: 256000, + }, + { + id: 'mistral/ministral-3b', + name: 'Ministral 3B', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.1, cacheRead: 0.01 }, + contextWindow: 131072, + maxOutputTokens: 4000, + }, + { + id: 'mistral/ministral-8b', + name: 'Ministral 8B', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.15, cacheRead: 0.015 }, + contextWindow: 262144, + maxOutputTokens: 4000, + }, + { + id: 'mistral/mistral-large-3', + name: 'Mistral Large 3', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.5, output: 1.5, cacheRead: 0.05 }, + contextWindow: 262144, + maxOutputTokens: 256000, + }, + { + id: 'mistral/mistral-large-4', + name: 'Mistral Large 4', + input: ['text', 'image'], + reasoning: { levels: { off: 'none', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 1.36, output: 4.18, cacheRead: 0.14 }, + contextWindow: 524288, + maxOutputTokens: 262144, + }, + { + id: 'mistral/mistral-medium-3.5', + name: 'Mistral Medium Latest', + input: ['text', 'image'], + reasoning: { levels: { off: 'none', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 1.5, output: 7.5, cacheRead: 0.15 }, + contextWindow: 262144, + maxOutputTokens: 256000, + }, + { + id: 'mistral/mistral-nemo', + name: 'Mistral Nemo 12B', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.029, output: 0.03 }, + contextWindow: 131072, + maxOutputTokens: 131072, + }, + { + id: 'mistral/mistral-small', + name: 'Mistral Small', + input: ['text', 'image'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.6, cacheRead: 0.015 }, + contextWindow: 262144, + maxOutputTokens: 4000, + }, + { + id: 'mixedbread/toast-1', + name: 'Toast 1', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.3, output: 0.72, cacheRead: 0.036 }, + contextWindow: 131000, + maxOutputTokens: 4000, + }, + { + id: 'moonshotai/kimi-k2', + name: 'Kimi K2 Instruct', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.57, output: 2.3 }, + contextWindow: 131072, + maxOutputTokens: 131072, + }, + { + id: 'moonshotai/kimi-k2.5', + name: 'Kimi K2.5', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.6, output: 3 }, + contextWindow: 256000, + maxOutputTokens: 256000, + }, + { + id: 'moonshotai/kimi-k2.6', + name: 'Kimi K2.6', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + contextWindow: 262000, + maxOutputTokens: 262000, + }, + { + id: 'moonshotai/kimi-k2.7-code', + name: 'Kimi K2.7 Code', + input: ['text', 'image', 'document', 'video'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.95, output: 4, cacheRead: 0.19 }, + contextWindow: 256000, + maxOutputTokens: 32768, + }, + { + id: 'moonshotai/kimi-k2.7-code-highspeed', + name: 'Kimi K2.7 Code High Speed', + input: ['text', 'image', 'document', 'video'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.9, output: 8, cacheRead: 0.38 }, + contextWindow: 262144, + maxOutputTokens: 32768, + }, + { + id: 'moonshotai/kimi-k3', + name: 'Kimi K3', + input: ['text', 'image', 'document', 'video'], + reasoning: { + levels: { low: 'low', high: 'high', max: 'max' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'moonshotai/kimi-k3-fast', + name: 'Kimi K3 Fast', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + max: 'max', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'moonshotai/kimi-k3.1-pro', + name: 'Kimi K3.1 Pro', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', high: 'high', max: 'max' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.2, + cacheWrite: 2, + }, + contextWindow: 1048576, + maxOutputTokens: 1048576, + }, + { + id: 'moonshotai/kimi-k3.1-pro-highspeed', + name: 'Kimi K3.1 Pro Highspeed', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', high: 'high', max: 'max' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 4, + output: 20, + cacheRead: 0.2, + cacheWrite: 4, + }, + contextWindow: 1048576, + maxOutputTokens: 1048576, + }, + { + id: 'morph/morph-v3-fast', + name: 'Morph V3 Fast', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.8, output: 1.2 }, + contextWindow: 81920, + maxOutputTokens: 16384, + }, + { + id: 'morph/morph-v3-large', + name: 'Morph V3 Large', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.9, output: 1.9 }, + contextWindow: 81920, + maxOutputTokens: 16384, + }, + { + id: 'nvidia/nemotron-3-nano-30b-a3b', + name: 'Nemotron 3 Nano 30B A3B', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.05, output: 0.2, cacheRead: 0.025 }, + contextWindow: 262144, + maxOutputTokens: 262144, + }, + { + id: 'nvidia/nemotron-3-super-120b-a12b', + name: 'NVIDIA Nemotron 3 Super 120B A12B', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.15, output: 0.65 }, + contextWindow: 256000, + maxOutputTokens: 32000, + }, + { + id: 'nvidia/nemotron-3-ultra-550b-a55b', + name: 'Nemotron 3 Ultra', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 65000, + }, + { + id: 'nvidia/nemotron-3.5-lightning', + name: 'Nemotron 3.5 Lightning 30B', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 262144, + maxOutputTokens: 131072, + }, + { + id: 'nvidia/nemotron-3.5-lightning-free', + name: 'Nemotron 3.5 Lightning Free', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 65000, + }, + { + id: 'nvidia/nemotron-3.5-super-vl', + name: 'NVIDIA Nemotron 3.5 Super VL', + input: ['text', 'image', 'video'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 1048576, + maxOutputTokens: 1048576, + }, + { + id: 'nvidia/nemotron-nano-12b-v2-vl', + name: 'Nvidia Nemotron Nano 12B V2 VL', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.2, output: 0.6 }, + contextWindow: 131072, + maxOutputTokens: 131072, + }, + { + id: 'nvidia/nemotron-nano-9b-v2', + name: 'Nvidia Nemotron Nano 9B V2', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.06, output: 0.23 }, + contextWindow: 131072, + maxOutputTokens: 131072, + }, + { + id: 'openai/gpt-4.1', + name: 'GPT-4.1', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 2, output: 8, cacheRead: 0.5 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'openai/gpt-4.1-batch', + name: 'GPT-4.1 (Batch)', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 1, output: 4, cacheRead: 0.25 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'openai/gpt-4.1-fast', + name: 'GPT-4.1 (Fast)', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 3.5, output: 14, cacheRead: 0.875 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'openai/gpt-4.1-mini', + name: 'GPT-4.1 mini', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.4, output: 1.6, cacheRead: 0.1 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'openai/gpt-4.1-mini-batch', + name: 'GPT-4.1 mini (Batch)', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.2, output: 0.8, cacheRead: 0.05 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'openai/gpt-4.1-mini-fast', + name: 'GPT-4.1 mini (Fast)', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.7, output: 2.8, cacheRead: 0.175 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'openai/gpt-4.1-nano', + name: 'GPT-4.1 nano', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.1, output: 0.4, cacheRead: 0.03 }, + contextWindow: 1047576, + maxOutputTokens: 32768, + }, + { + id: 'openai/gpt-4o', + name: 'GPT-4o', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 2.5, output: 10, cacheRead: 1.25 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-4o-batch', + name: 'GPT-4o (Batch)', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 1.25, output: 5, cacheRead: 0.625 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-4o-fast', + name: 'GPT-4o (Fast)', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 4.25, output: 17, cacheRead: 2.125 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-4o-mini', + name: 'GPT-4o mini', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.15, output: 0.6, cacheRead: 0.075 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-4o-mini-batch', + name: 'GPT-4o mini (Batch)', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.075, output: 0.3, cacheRead: 0.0375 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-4o-mini-fast', + name: 'GPT-4o mini (Fast)', + input: ['text', 'image', 'document'], + reasoning: false, + prices: { currency: 'USD', input: 0.25, output: 1, cacheRead: 0.125 }, + contextWindow: 128000, + maxOutputTokens: 16384, + }, + { + id: 'openai/gpt-5', + name: 'GPT-5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5-batch', + name: 'GPT-5 (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.625, output: 5, cacheRead: 0.0625 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5-codex', + name: 'GPT-5-Codex', + input: ['text', 'image', 'document'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.13 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5-fast', + name: 'GPT-5 (Fast)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + prices: { currency: 'USD', input: 2.5, output: 20, cacheRead: 0.25 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5-mini', + name: 'GPT-5 mini', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5-mini-batch', + name: 'GPT-5 mini (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.125, output: 1, cacheRead: 0.0125 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5-mini-fast', + name: 'GPT-5 mini (Fast)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.45, output: 3.6, cacheRead: 0.045 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5-nano', + name: 'GPT-5 nano', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5-nano-batch', + name: 'GPT-5 nano (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.025, output: 0.2, cacheRead: 0.0025 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5-pro', + name: 'GPT-5 pro', + input: ['text', 'image', 'document'], + reasoning: { levels: { high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 15, output: 120 }, + contextWindow: 400000, + maxOutputTokens: 272000, + }, + { + id: 'openai/gpt-5-pro-batch', + name: 'GPT-5 pro (Batch)', + input: ['text', 'image', 'document'], + reasoning: { levels: { high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 7.5, output: 60 }, + contextWindow: 400000, + maxOutputTokens: 272000, + }, + { + id: 'openai/gpt-5.1-codex', + name: 'GPT-5.1-Codex', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.13 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.1-codex-max', + name: 'GPT 5.1 Codex Max', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.25, output: 10, cacheRead: 0.125 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.1-codex-mini', + name: 'GPT 5.1 Codex Mini', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.25, output: 2, cacheRead: 0.03 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.1-thinking', + name: 'GPT 5.1 Thinking', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.1-thinking-fast', + name: 'GPT 5.1 Thinking (Fast)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 2.5, output: 20, cacheRead: 0.25 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.2', + name: 'GPT 5.2', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.2-batch', + name: 'GPT 5.2 (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.875, output: 7, cacheRead: 0.0875 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.2-codex', + name: 'GPT 5.2 Codex', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.75, output: 14, cacheRead: 0.175 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.2-fast', + name: 'GPT 5.2 (Fast)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 3.5, output: 28, cacheRead: 0.35 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.2-pro', + name: 'GPT 5.2 ', + input: ['text', 'image', 'document'], + reasoning: { + levels: { medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { currency: 'USD', input: 21, output: 168 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.3-codex', + name: 'GPT 5.3 Codex', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1.75, output: 14, cacheRead: 0.175 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.3-codex-fast', + name: 'GPT 5.3 Codex (Fast)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 3.5, output: 28, cacheRead: 0.35 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.4', + name: 'GPT 5.4', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.5, + output: 15, + cacheRead: 0.25, + tiers: [ + { inputTokensAbove: 271999, input: 5, output: 22.5, cacheRead: 0.5 }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.4-batch', + name: 'GPT 5.4 (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1.25, + output: 7.5, + cacheRead: 0.125, + tiers: [ + { + inputTokensAbove: 271999, + input: 2.5, + output: 11.25, + cacheRead: 0.25, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.4-fast', + name: 'GPT 5.4 (Fast)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 5, output: 30, cacheRead: 0.5 }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.4-mini', + name: 'GPT 5.4 Mini', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.75, output: 4.5, cacheRead: 0.075 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.4-mini-batch', + name: 'GPT 5.4 Mini (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.375, output: 2.25, cacheRead: 0.0375 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.4-mini-fast', + name: 'GPT 5.4 Mini (Fast)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1.5, output: 9, cacheRead: 0.15 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.4-nano', + name: 'GPT 5.4 Nano', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.2, output: 1.25, cacheRead: 0.02 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.4-nano-batch', + name: 'GPT 5.4 Nano (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.1, output: 0.625, cacheRead: 0.01 }, + contextWindow: 400000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.4-pro', + name: 'GPT 5.4 Pro', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 30, + output: 180, + tiers: [{ inputTokensAbove: 271999, input: 60, output: 270 }], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.5', + name: 'GPT 5.5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.5-batch', + name: 'GPT 5.5 (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2.5, + output: 15, + cacheRead: 0.25, + tiers: [ + { inputTokensAbove: 271999, input: 5, output: 22.5, cacheRead: 0.5 }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.5-fast', + name: 'GPT 5.5 (Fast)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 12.5, output: 75, cacheRead: 1.25 }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.5-pro', + name: 'GPT 5.5 Pro', + input: ['text', 'image', 'document'], + reasoning: { + levels: { medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 30, + output: 180, + tiers: [{ inputTokensAbove: 271999, input: 60, output: 270 }], + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.5-pro-batch', + name: 'GPT 5.5 Pro (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 15, + output: 90, + tiers: [{ inputTokensAbove: 271999, input: 30, output: 135 }], + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-luna', + name: 'GPT 5.6 Luna', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.2, + output: 1.2, + cacheRead: 0.02, + cacheWrite: 0.25, + tiers: [ + { + inputTokensAbove: 271999, + input: 0.4, + output: 1.8, + cacheRead: 0.04, + cacheWrite: 0.5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-luna-batch', + name: 'GPT 5.6 Luna (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.1, + output: 0.6, + cacheRead: 0.01, + cacheWrite: 0.125, + tiers: [ + { + inputTokensAbove: 271999, + input: 0.2, + output: 0.9, + cacheRead: 0.02, + cacheWrite: 0.25, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-luna-fast', + name: 'GPT 5.6 Luna (Fast)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.4, + output: 2.4, + cacheRead: 0.04, + cacheWrite: 0.5, + tiers: [ + { + inputTokensAbove: 271999, + input: 0.8, + output: 3.6, + cacheRead: 0.08, + cacheWrite: 1, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-sol', + name: 'GPT 5.6 Sol', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-sol-batch', + name: 'GPT 5.6 Sol (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.2, + cacheWrite: 2.5, + tiers: [ + { + inputTokensAbove: 271999, + input: 4, + output: 15, + cacheRead: 0.4, + cacheWrite: 5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-sol-fast', + name: 'GPT 5.6 Sol (Fast)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 8, + output: 40, + cacheRead: 0.8, + cacheWrite: 10, + tiers: [ + { + inputTokensAbove: 271999, + input: 16, + output: 60, + cacheRead: 1.6, + cacheWrite: 20, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-terra', + name: 'GPT 5.6 Terra', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 12, + cacheRead: 0.2, + cacheWrite: 2.5, + tiers: [ + { + inputTokensAbove: 271999, + input: 4, + output: 18, + cacheRead: 0.4, + cacheWrite: 5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-terra-batch', + name: 'GPT 5.6 Terra (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 6, + cacheRead: 0.1, + cacheWrite: 1.25, + tiers: [ + { + inputTokensAbove: 271999, + input: 2, + output: 9, + cacheRead: 0.2, + cacheWrite: 2.5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-5.6-terra-fast', + name: 'GPT 5.6 Terra (Fast)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 4, + output: 24, + cacheRead: 0.4, + cacheWrite: 5, + tiers: [ + { + inputTokensAbove: 271999, + input: 8, + output: 36, + cacheRead: 0.8, + cacheWrite: 10, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-astra', + name: 'GPT-6 Astra', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 10, + output: 50, + cacheRead: 1, + cacheWrite: 12.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 20, + output: 75, + cacheRead: 2, + cacheWrite: 25, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-astra-batch', + name: 'GPT-6 Astra (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + tiers: [ + { + inputTokensAbove: 272000, + input: 10, + output: 37.5, + cacheRead: 1, + cacheWrite: 12.5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-astra-fast', + name: 'GPT-6 Astra (Fast)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 20, + output: 100, + cacheRead: 2, + cacheWrite: 25, + tiers: [ + { + inputTokensAbove: 272000, + input: 40, + output: 150, + cacheRead: 4, + cacheWrite: 50, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-luna', + name: 'GPT-6 Luna', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.1, + output: 0.5, + cacheRead: 0.01, + cacheWrite: 0.125, + tiers: [ + { + inputTokensAbove: 272000, + input: 0.2, + output: 0.75, + cacheRead: 0.02, + cacheWrite: 0.25, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-luna-batch', + name: 'GPT-6 Luna (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.05, + output: 0.25, + cacheRead: 0.005, + cacheWrite: 0.0625, + tiers: [ + { + inputTokensAbove: 272000, + input: 0.1, + output: 0.375, + cacheRead: 0.01, + cacheWrite: 0.125, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-luna-fast', + name: 'GPT-6 Luna (Fast)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 0.2, + output: 1, + cacheRead: 0.02, + cacheWrite: 0.25, + tiers: [ + { + inputTokensAbove: 272000, + input: 0.4, + output: 1.5, + cacheRead: 0.04, + cacheWrite: 0.5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-sol', + name: 'GPT-6 Sol', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.2, + cacheWrite: 2.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 4, + output: 15, + cacheRead: 0.4, + cacheWrite: 5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-sol-batch', + name: 'GPT-6 Sol (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 5, + cacheRead: 0.1, + cacheWrite: 1.25, + tiers: [ + { + inputTokensAbove: 272000, + input: 2, + output: 7.5, + cacheRead: 0.2, + cacheWrite: 2.5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6-sol-fast', + name: 'GPT-6 Sol (Fast)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 4, + output: 20, + cacheRead: 0.4, + cacheWrite: 5, + tiers: [ + { + inputTokensAbove: 272000, + input: 8, + output: 30, + cacheRead: 0.8, + cacheWrite: 10, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6.1-sol', + name: 'GPT-6.1 Sol', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 10, + cacheRead: 0.1, + cacheWrite: 2.5, + tiers: [ + { + inputTokensAbove: 272000, + input: 4, + output: 15, + cacheRead: 0.2, + cacheWrite: 5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6.1-sol-batch', + name: 'GPT-6.1 Sol (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 5, + cacheRead: 0.05, + cacheWrite: 1.25, + tiers: [ + { + inputTokensAbove: 272000, + input: 2, + output: 7.5, + cacheRead: 0.1, + cacheWrite: 2.5, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-6.1-sol-fast', + name: 'GPT-6.1 Sol (Fast)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { + currency: 'USD', + input: 4, + output: 20, + cacheRead: 0.2, + cacheWrite: 5, + tiers: [ + { + inputTokensAbove: 272000, + input: 8, + output: 30, + cacheRead: 0.4, + cacheWrite: 10, + }, + ], + }, + contextWindow: 1050000, + maxOutputTokens: 128000, + }, + { + id: 'openai/gpt-oss-120b', + name: 'GPT OSS 120B', + input: ['text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 131072, + maxOutputTokens: 131072, + }, + { + id: 'openai/gpt-oss-20b', + name: 'GPT OSS 20B', + input: ['text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 131072, + maxOutputTokens: 8192, + }, + { + id: 'openai/gpt-oss-safeguard-120b', + name: 'GPT OSS Safeguard 120B', + input: ['text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.15, output: 0.6 }, + contextWindow: 128000, + maxOutputTokens: 16000, + }, + { + id: 'openai/gpt-oss-safeguard-20b', + name: 'GPT OSS Safeguard 20B', + input: ['text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 128000, + maxOutputTokens: 16000, + }, + { + id: 'openai/o1', + name: 'o1', + input: ['text', 'image', 'document'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 15, output: 60, cacheRead: 7.5 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'openai/o3', + name: 'o3', + input: ['text', 'image', 'document'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 2, output: 8, cacheRead: 0.5 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'openai/o3-fast', + name: 'o3 (Fast)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 3.5, output: 14, cacheRead: 0.875 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'openai/o3-mini', + name: 'o3-mini', + input: ['text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.1, output: 4.4, cacheRead: 0.55 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'openai/o3-pro', + name: 'o3 Pro', + input: ['text', 'image', 'document'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 20, output: 80 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'openai/o4-mini', + name: 'o4-mini', + input: ['text', 'image', 'document'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.1, output: 4.4, cacheRead: 0.275 }, + contextWindow: 200000, + maxOutputTokens: 100000, + }, + { + id: 'perplexity/sonar', + name: 'Sonar', + input: ['text', 'image'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.25, output: 2.5, cacheWrite: 0.0625 }, + contextWindow: 127000, + maxOutputTokens: 8000, + }, + { + id: 'poolside/laguna-s-2.1', + name: 'Laguna S 2.1', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.09, output: 0.18, cacheRead: 0.009 }, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'poolside/laguna-s-2.1-free', + name: 'Laguna S 2.1 Free', + input: ['text'], + reasoning: { levels: {}, budget: false }, + contextWindow: 256000, + maxOutputTokens: 32768, + }, + { + id: 'quiverai/arrow-2', + name: 'Arrow 2', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 4, + output: 20, + cacheRead: 0.4, + cacheWrite: 5, + }, + contextWindow: 131072, + maxOutputTokens: 131072, + }, + { + id: 'quiverai/arrow-2-telos', + name: 'Arrow 2 Telos', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 6, + output: 30, + cacheRead: 0.6, + cacheWrite: 7.5, + }, + contextWindow: 131072, + maxOutputTokens: 131072, + }, + { + id: 'reflection/beam', + name: 'Beam 1.0', + input: ['text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: 'reflection/beam-free', + name: 'Beam 1.0 (Free)', + input: ['text'], + reasoning: { + levels: { + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: 'sakana/fugu-max', + name: 'Fugu Max', + input: ['text', 'image'], + reasoning: { + levels: { high: 'high', xhigh: 'xhigh', max: 'max' }, + budget: false, + }, + prices: { currency: 'USD', input: 2, output: 6, cacheRead: 0.25 }, + contextWindow: 1000000, + maxOutputTokens: 1000000, + }, + { + id: 'sakana/fugu-ultra', + name: 'Fugu Ultra', + input: ['text', 'image'], + reasoning: { + levels: { high: 'high', xhigh: 'xhigh', max: 'max' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 30, + cacheRead: 0.5, + tiers: [ + { inputTokensAbove: 272000, input: 10, output: 45, cacheRead: 1 }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 1000000, + }, + { + id: 'sakana/fugu-ultra-v2', + name: 'Fugu Ultra v2', + input: ['text', 'image'], + reasoning: { + levels: { high: 'high', xhigh: 'xhigh', max: 'max' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 5, + output: 30, + cacheRead: 0.5, + tiers: [ + { inputTokensAbove: 272000, input: 10, output: 45, cacheRead: 1 }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 1000000, + }, + { + id: 'sakana/namazu', + name: 'Sakana Namazu', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.95, output: 4, cacheRead: 0.15 }, + contextWindow: 256000, + maxOutputTokens: 256000, + }, + { + id: 'scaledown/scaledown-extract-1', + name: 'Extract-1', + input: ['text'], + reasoning: false, + contextWindow: 1000000, + maxOutputTokens: 1000000, + }, + { + id: 'scaledown/scaledown-summarize-1', + name: 'Summarize-1', + input: ['text'], + reasoning: false, + contextWindow: 1000000, + maxOutputTokens: 1000, + }, + { + id: 'spacexai/grok-4.20-multi-agent', + name: 'Grok 4.20 Multi-Agent', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1.25, + output: 2.5, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 200000, input: 2.5, output: 5, cacheRead: 0.4 }, + ], + }, + contextWindow: 2000000, + maxOutputTokens: 2000000, + }, + { + id: 'spacexai/grok-4.20-multi-agent-batch', + name: 'Grok 4.20 Multi-Agent (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 2, + cacheRead: 0.16, + tiers: [ + { inputTokensAbove: 200000, input: 2, output: 4, cacheRead: 0.32 }, + ], + }, + contextWindow: 2000000, + maxOutputTokens: 2000000, + }, + { + id: 'spacexai/grok-4.20-multi-agent-beta', + name: 'Grok 4.20 Multi Agent Beta', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1.25, + output: 2.5, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 200000, input: 2.5, output: 5, cacheRead: 0.4 }, + ], + }, + contextWindow: 2000000, + maxOutputTokens: 2000000, + }, + { + id: 'spacexai/grok-4.20-non-reasoning', + name: 'Grok 4.20 Non-Reasoning', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 2000000, + maxOutputTokens: 2000000, + }, + { + id: 'spacexai/grok-4.20-non-reasoning-batch', + name: 'Grok 4.20 Non-Reasoning (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 2, + cacheRead: 0.16, + tiers: [ + { inputTokensAbove: 200000, input: 2, output: 4, cacheRead: 0.32 }, + ], + }, + contextWindow: 2000000, + maxOutputTokens: 2000000, + }, + { + id: 'spacexai/grok-4.20-non-reasoning-beta', + name: 'Grok 4.20 Beta Non-Reasoning', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1.25, + output: 2.5, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 200000, input: 2.5, output: 5, cacheRead: 0.4 }, + ], + }, + contextWindow: 2000000, + maxOutputTokens: 2000000, + }, + { + id: 'spacexai/grok-4.20-reasoning', + name: 'Grok 4.20 Reasoning', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 2000000, + maxOutputTokens: 2000000, + }, + { + id: 'spacexai/grok-4.20-reasoning-batch', + name: 'Grok 4.20 Reasoning (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 2, + cacheRead: 0.16, + tiers: [ + { inputTokensAbove: 200000, input: 2, output: 4, cacheRead: 0.32 }, + ], + }, + contextWindow: 2000000, + maxOutputTokens: 2000000, + }, + { + id: 'spacexai/grok-4.20-reasoning-beta', + name: 'Grok 4.20 Beta Reasoning', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1.25, + output: 2.5, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 200000, input: 2.5, output: 5, cacheRead: 0.4 }, + ], + }, + contextWindow: 2000000, + maxOutputTokens: 2000000, + }, + { + id: 'spacexai/grok-4.3', + name: 'Grok 4.3', + input: ['text', 'image', 'document'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1.25, + output: 2.5, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 200000, input: 2.5, output: 5, cacheRead: 0.4 }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 1000000, + }, + { + id: 'spacexai/grok-4.3-batch', + name: 'Grok 4.3 (Batch)', + input: ['text', 'image', 'document'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 2, + cacheRead: 0.16, + tiers: [ + { inputTokensAbove: 200000, input: 2, output: 4, cacheRead: 0.32 }, + ], + }, + contextWindow: 1000000, + maxOutputTokens: 1000000, + }, + { + id: 'spacexai/grok-4.5', + name: 'Grok 4.5', + input: ['text', 'image', 'document'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 6, + cacheRead: 0.3, + tiers: [ + { inputTokensAbove: 200000, input: 4, output: 12, cacheRead: 0.6 }, + ], + }, + contextWindow: 500000, + maxOutputTokens: 500000, + }, + { + id: 'spacexai/grok-4.6', + name: 'Grok 4.6', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 6, + cacheRead: 0.5, + tiers: [{ inputTokensAbove: 200000, input: 4, output: 12, cacheRead: 1 }], + }, + contextWindow: 500000, + maxOutputTokens: 500000, + }, + { + id: 'spacexai/grok-4.7', + name: 'Grok 4.7', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 6, + cacheRead: 0.5, + tiers: [{ inputTokensAbove: 200000, input: 4, output: 12, cacheRead: 1 }], + }, + contextWindow: 500000, + maxOutputTokens: 500000, + }, + { + id: 'spacexai/grok-build-0.1', + name: 'Grok Build 0.1', + input: ['text', 'image'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 1, + output: 2, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 200000, input: 2, output: 4, cacheRead: 0.4 }, + ], + }, + contextWindow: 256000, + maxOutputTokens: 256000, + }, + { + id: 'stealth/glyph-cluster', + name: 'Glyph Cluster', + input: ['text'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh' }, + budget: false, + }, + contextWindow: 256000, + maxOutputTokens: 256000, + }, + { + id: 'stepfun/step-3.7-flash', + name: 'Step 3.7 Flash', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.2, output: 1.15, cacheRead: 0.04 }, + contextWindow: 256000, + maxOutputTokens: 256000, + }, + { + id: 'stepfun/step-5-preview', + name: 'Step 5 Preview', + input: ['text', 'image', 'video'], + reasoning: { + levels: { low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 1048576, + maxOutputTokens: 1048576, + }, + { + id: 'tencent/hy-mt2-lite', + name: 'Tencent Hy-MT2-Lite', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.044, output: 0.177 }, + contextWindow: 8000, + maxOutputTokens: 4000, + }, + { + id: 'tencent/hy-mt2-plus', + name: 'Tencent Hy-MT2-Plus', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.074, output: 0.295 }, + contextWindow: 8000, + maxOutputTokens: 4000, + }, + { + id: 'tencent/hy-mt2-pro', + name: 'Tencent Hy-MT2-Pro', + input: ['text'], + reasoning: false, + prices: { currency: 'USD', input: 0.074, output: 0.295 }, + contextWindow: 8000, + maxOutputTokens: 4000, + }, + { + id: 'tencent/hy3', + name: 'Hy3', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', high: 'high' }, + budget: false, + }, + contextWindow: 262144, + maxOutputTokens: 262144, + }, + { + id: 'tencent/hy4-preview', + name: 'Tencent Hy4 Preview', + input: ['text'], + reasoning: { levels: { off: 'none', high: 'high' }, budget: false }, + prices: { currency: 'USD', input: 0.834, output: 2.501, cacheRead: 0.042 }, + contextWindow: 1024000, + maxOutputTokens: 64000, + }, + { + id: 'thinkingmachines/inkling', + name: 'Inkling', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 256000, + maxOutputTokens: 256000, + }, + { + id: 'thinkingmachines/inkling-small', + name: 'Inkling Small', + input: ['text', 'image', 'document'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', + }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 1000000, + }, + { + id: 'xiaomi/mimo-v2.5', + name: 'MiMo M2.5', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.119, output: 0.238, cacheRead: 0.0025 }, + contextWindow: 1050000, + maxOutputTokens: 131100, + }, + { + id: 'xiaomi/mimo-v2.5-pro', + name: 'MiMo V2.5 Pro', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { + currency: 'USD', + input: 0.3045, + output: 0.609, + cacheRead: 0.0028, + }, + contextWindow: 1050000, + maxOutputTokens: 131000, + }, + { + id: 'xiaomi/mimo-v2.6-flash', + name: 'MiMo V2.6 Flash', + input: ['text', 'audio', 'image', 'video'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: 'xiaomi/mimo-v2.6-pro', + name: 'MiMo V2.6 Pro', + input: ['text', 'audio', 'image', 'video'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: 'xiaomi/mimo-v2.6-pro-ultraspeed', + name: 'MiMo V2.6 Pro UltraSpeed', + input: ['text', 'audio', 'image', 'video'], + reasoning: { + levels: { + off: 'none', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + }, + budget: false, + }, + prices: { currency: 'USD', input: 4.35, output: 8.7, cacheRead: 0.036 }, + contextWindow: 1048576, + maxOutputTokens: 131072, + }, + { + id: 'zai/glm-4.5', + name: 'GLM 4.5', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.6, output: 2.2, cacheRead: 0.11 }, + contextWindow: 128000, + maxOutputTokens: 96000, + }, + { + id: 'zai/glm-4.5-air', + name: 'GLM 4.5 Air', + input: ['text'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.2, output: 1.1, cacheRead: 0.03 }, + contextWindow: 128000, + maxOutputTokens: 96000, + }, + { + id: 'zai/glm-4.5v', + name: 'GLM 4.5V', + input: ['text', 'image'], + reasoning: { levels: {}, budget: false }, + prices: { currency: 'USD', input: 0.6, output: 1.8, cacheRead: 0.11 }, + contextWindow: 66000, + maxOutputTokens: 16000, + }, + { + id: 'zai/glm-4.6', + name: 'GLM 4.6', + input: ['text'], + reasoning: { levels: {}, budget: false }, + contextWindow: 200000, + maxOutputTokens: 96000, + }, + { + id: 'zai/glm-4.7', + name: 'GLM 4.7', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 200000, + maxOutputTokens: 120000, + }, + { + id: 'zai/glm-4.7-flash', + name: 'GLM 4.7 Flash', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.07, output: 0.4 }, + contextWindow: 200000, + maxOutputTokens: 131000, + }, + { + id: 'zai/glm-4.7-flashx', + name: 'GLM 4.7 FlashX', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.06, output: 0.4, cacheRead: 0.01 }, + contextWindow: 200000, + maxOutputTokens: 128000, + }, + { + id: 'zai/glm-5', + name: 'GLM 5', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1, output: 3.2 }, + contextWindow: 202800, + maxOutputTokens: 131100, + }, + { + id: 'zai/glm-5-turbo', + name: 'GLM 5 Turbo', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.2, output: 4, cacheRead: 0.24 }, + contextWindow: 202800, + maxOutputTokens: 131100, + }, + { + id: 'zai/glm-5.1', + name: 'GLM 5.1', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 202800, + maxOutputTokens: 64000, + }, + { + id: 'zai/glm-5.2', + name: 'GLM 5.2', + input: ['text'], + reasoning: { + levels: { off: 'none', high: 'high', max: 'max' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'zai/glm-5.2-fast', + name: 'GLM 5.2 Fast', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 128000, + }, + { + id: 'zai/glm-5.3', + name: 'GLM 5.3', + input: ['text'], + reasoning: { + levels: { low: 'low', high: 'high', max: 'max' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 1000000, + }, + { + id: 'zai/glm-5.3-fast', + name: 'GLM 5.3 Fast', + input: ['text'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + contextWindow: 1048576, + maxOutputTokens: 262144, + }, + { + id: 'zai/glm-5.3-flash', + name: 'GLM 5.3 Flash', + input: ['text', 'image', 'video'], + reasoning: { + levels: { low: 'low', high: 'high', max: 'max' }, + budget: false, + }, + contextWindow: 1000000, + maxOutputTokens: 131000, + }, + { + id: 'zai/glm-5.3-flashx', + name: 'GLM 5.3 FlashX', + input: ['text', 'image'], + reasoning: { + levels: { low: 'low', high: 'high', max: 'max' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.37, output: 1.25, cacheRead: 0.075 }, + contextWindow: 1000000, + maxOutputTokens: 131072, + }, + { + id: 'zai/glm-5v-turbo', + name: 'GLM 5V Turbo', + input: ['text', 'image', 'document'], + reasoning: { + levels: { off: 'none', low: 'low', medium: 'medium', high: 'high' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.2, output: 4, cacheRead: 0.24 }, + contextWindow: 200000, + maxOutputTokens: 128000, + }, +] diff --git a/packages/ai-vercel-gateway/vite.config.ts b/packages/ai-vercel-gateway/vite.config.ts index 5e5c1069be..2be2e5728c 100644 --- a/packages/ai-vercel-gateway/vite.config.ts +++ b/packages/ai-vercel-gateway/vite.config.ts @@ -29,7 +29,12 @@ const config = defineConfig({ export default mergeConfig( config, tanstackViteConfig({ - entry: ['./src/index.ts', './src/byok.ts', './src/tools/index.ts'], + entry: [ + './src/index.ts', + './src/models.ts', + './src/byok.ts', + './src/tools/index.ts', + ], srcDir: './src', cjs: false, }), diff --git a/packages/ai-vertex/package.json b/packages/ai-vertex/package.json index ed91417518..8bba961e5a 100644 --- a/packages/ai-vertex/package.json +++ b/packages/ai-vertex/package.json @@ -24,6 +24,10 @@ ".": { "types": "./dist/esm/index.d.ts", "import": "./dist/esm/index.js" + }, + "./models": { + "types": "./dist/esm/models.d.ts", + "import": "./dist/esm/models.js" } }, "files": [ diff --git a/packages/ai-vertex/src/models.ts b/packages/ai-vertex/src/models.ts new file mode 100644 index 0000000000..5e6d6e2b98 --- /dev/null +++ b/packages/ai-vertex/src/models.ts @@ -0,0 +1,272 @@ +// Generated by scripts/sync-model-catalogs.ts from modelschemas. Do not edit. +import type { ModelRecord } from '@tanstack/ai' + +/** Every Vertex AI chat model on modelschemas.com, sorted by id. */ +export const models: ReadonlyArray = [ + { + id: 'gemini-2.5-flash', + name: 'Gemini 2.5 Flash', + input: ['text', 'image', 'audio', 'video'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 0.3, + output: 2.5, + cacheRead: 0.03, + tiers: [ + { inputTokensAbove: 200000, input: 0.3, output: 2.5, cacheRead: 0.03 }, + ], + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-2.5-flash-lite', + name: 'Gemini 2.5 Flash-Lite', + input: ['text', 'image', 'audio', 'video'], + reasoning: { levels: {}, budget: true }, + prices: { currency: 'USD', input: 0.1, output: 0.4, cacheRead: 0.01 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-2.5-pro', + name: 'Gemini 2.5 Pro', + input: ['text', 'image', 'audio', 'video'], + reasoning: { levels: {}, budget: true }, + prices: { + currency: 'USD', + input: 1.25, + output: 10, + cacheRead: 0.125, + tiers: [ + { inputTokensAbove: 200000, input: 2.5, output: 15, cacheRead: 0.25 }, + ], + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3-flash-preview', + name: 'Gemini 3 Flash', + input: ['text', 'image', 'audio', 'video'], + reasoning: { + levels: { + minimal: 'MINIMAL', + low: 'LOW', + medium: 'MEDIUM', + high: 'HIGH', + }, + budget: false, + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.1-flash-lite', + name: 'Gemini 3.1 Flash-Lite', + input: ['text', 'image', 'audio', 'video'], + reasoning: { + levels: { + minimal: 'MINIMAL', + low: 'LOW', + medium: 'MEDIUM', + high: 'HIGH', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.25, output: 1.5, cacheRead: 0.025 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.1-pro-preview', + name: 'Gemini 3.1 Pro', + input: ['text', 'image', 'audio', 'video'], + reasoning: { + levels: { low: 'LOW', medium: 'MEDIUM', high: 'HIGH' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 12, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 200000, input: 4, output: 18, cacheRead: 0.4 }, + ], + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.1-pro-preview-customtools', + name: 'Gemini 3.1 Pro', + input: ['text', 'image', 'audio', 'video'], + reasoning: { + levels: { low: 'LOW', medium: 'MEDIUM', high: 'HIGH' }, + budget: false, + }, + prices: { + currency: 'USD', + input: 2, + output: 12, + cacheRead: 0.2, + tiers: [ + { inputTokensAbove: 200000, input: 4, output: 18, cacheRead: 0.4 }, + ], + }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.5-flash', + name: 'Gemini 3.5 Flash', + input: ['text', 'image', 'audio', 'video'], + reasoning: { + levels: { + minimal: 'MINIMAL', + low: 'LOW', + medium: 'MEDIUM', + high: 'HIGH', + }, + budget: false, + }, + prices: { currency: 'USD', input: 1.5, output: 9, cacheRead: 0.15 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.5-flash-lite', + name: 'Gemini 3.5 Flash-Lite', + input: ['text', 'image', 'audio', 'video'], + reasoning: { + levels: { + minimal: 'MINIMAL', + low: 'LOW', + medium: 'MEDIUM', + high: 'HIGH', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.3, output: 2.5, cacheRead: 0.03 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.6-flash', + name: 'Gemini 3.6 Flash', + input: ['text', 'image', 'audio', 'video'], + reasoning: { + levels: { + minimal: 'MINIMAL', + low: 'LOW', + medium: 'MEDIUM', + high: 'HIGH', + }, + budget: false, + }, + prices: { currency: 'USD', input: 0.75, output: 3.75, cacheRead: 0.075 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.7-flash', + name: 'Gemini 3.7 Flash', + input: ['text', 'image', 'audio', 'video'], + reasoning: { + levels: { low: 'LOW', medium: 'MEDIUM', high: 'HIGH' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.75, output: 3.75, cacheRead: 0.075 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.8-flash', + name: 'Gemini 3.8 Flash', + input: ['text', 'image', 'audio', 'video'], + reasoning: { + levels: { low: 'LOW', medium: 'MEDIUM', high: 'HIGH' }, + budget: false, + }, + prices: { currency: 'USD', input: 0.75, output: 3.75, cacheRead: 0.075 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.8-flash-cyber', + name: 'Gemini 3.8 Flash Cyber', + input: ['text', 'image', 'audio', 'video'], + reasoning: { + levels: { low: 'LOW', medium: 'MEDIUM', high: 'HIGH' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.5, output: 7.5, cacheRead: 0.15 }, + contextWindow: 1048576, + maxOutputTokens: 65536, + }, + { + id: 'gemini-3.8-live', + name: 'Gemini 3.8 Live', + input: ['text', 'image', 'audio', 'video'], + reasoning: false, + maxOutputTokens: 64000, + }, + { + id: 'gemini-4-argon', + name: 'Gemini 4 Argon', + input: ['text', 'image', 'audio', 'video'], + reasoning: { + levels: { low: 'LOW', medium: 'MEDIUM', high: 'HIGH' }, + budget: false, + }, + contextWindow: 1048576, + maxOutputTokens: 1048576, + }, + { + id: 'gemini-4-argon-cyber-permissive', + name: 'Gemini 4 Argon', + input: ['text', 'image', 'audio', 'video'], + reasoning: { + levels: { low: 'LOW', medium: 'MEDIUM', high: 'HIGH' }, + budget: false, + }, + contextWindow: 1048576, + maxOutputTokens: 1048576, + }, + { + id: 'gemini-live-2.5-flash-native-audio', + name: 'Gemini 2.5 Flash with Gemini Live API', + input: ['text', 'image', 'audio', 'video'], + reasoning: false, + contextWindow: 128000, + maxOutputTokens: 64000, + }, + { + id: 'gemini-nano-banana-2.1', + name: 'Gemini Nano Banana 2.1', + input: ['text', 'image', 'video'], + reasoning: { + levels: { minimal: 'MINIMAL', medium: 'MEDIUM', high: 'HIGH' }, + budget: false, + }, + prices: { currency: 'USD', input: 1.5, output: 7.5, cacheRead: 0.15 }, + contextWindow: 131072, + maxOutputTokens: 32768, + }, + { + id: 'gemini-omni-1.1-flash-preview', + name: 'Gemini Omni 1.1 Flash Preview', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + maxOutputTokens: 57920, + }, + { + id: 'gemini-omni-flash-preview', + name: 'Gemini Omni Flash Preview', + input: ['text', 'image', 'video'], + reasoning: { levels: {}, budget: false }, + maxOutputTokens: 57920, + }, +] diff --git a/packages/ai-vertex/vite.config.ts b/packages/ai-vertex/vite.config.ts index 4fcc2dc70c..e4e6f8401f 100644 --- a/packages/ai-vertex/vite.config.ts +++ b/packages/ai-vertex/vite.config.ts @@ -32,7 +32,7 @@ const config = defineConfig({ export default mergeConfig( config, tanstackViteConfig({ - entry: ['./src/index.ts'], + entry: ['./src/index.ts', './src/models.ts'], srcDir: './src', cjs: false, }), diff --git a/packages/ai/skills/ai-core/adapter-configuration/SKILL.md b/packages/ai/skills/ai-core/adapter-configuration/SKILL.md index 3d56591c2a..d96809651e 100644 --- a/packages/ai/skills/ai-core/adapter-configuration/SKILL.md +++ b/packages/ai/skills/ai-core/adapter-configuration/SKILL.md @@ -36,6 +36,13 @@ sources: > or from the provider's API/docs to recommend the most current model. > The model lists in this skill and its reference files may be outdated. > Always verify against the source before recommending a specific model. +> +> **Model data at runtime:** most provider packages export a `./models` +> subpath (`import { models } from '@tanstack/ai-anthropic/models'`). Each +> record has `id`, `contextWindow`, `maxOutputTokens`, `prices`, and +> `reasoning`. `modelCost(model, usage)` from `@tanstack/ai` prices a call. A +> value the source does not list is `undefined`, so never treat a missing +> price as 0. See `docs/advanced/model-catalog.md`. ## Setup diff --git a/packages/ai/src/index.ts b/packages/ai/src/index.ts index d81fd184c8..fc605309a8 100644 --- a/packages/ai/src/index.ts +++ b/packages/ai/src/index.ts @@ -474,6 +474,16 @@ export type { export * from './types' export { CONTEXT_OVERFLOW_CODE } from './activities/error-payload' +// Model catalogs: each provider package exports its models at `./models`. +export { modelCost } from './model-catalog' +export type { + ModelCost, + ModelPrices, + ModelPriceTier, + ModelRates, + ModelRecord, +} from './model-catalog' + // One reasoning option for every provider: `chat({ reasoning })`. export { REASONING_LEVELS, diff --git a/packages/ai/src/model-catalog.ts b/packages/ai/src/model-catalog.ts new file mode 100644 index 0000000000..106e3e5dfd --- /dev/null +++ b/packages/ai/src/model-catalog.ts @@ -0,0 +1,99 @@ +import type { ModelReasoning } from './reasoning' +import type { Modality, TokenUsage } from './types' + +/** + * Prices per 1M tokens, in `currency`. A rate the provider's price card does + * not list is `undefined`: not known, not free. + */ +export interface ModelRates { + input?: number + output?: number + /** Input tokens read from the prompt cache. */ + cacheRead?: number + /** Input tokens written to the prompt cache (5-minute retention). */ + cacheWrite?: number + /** Input tokens written to the prompt cache with a 1-hour retention. */ + cacheWrite1h?: number +} + +/** The prices of a call with more than `inputTokensAbove` input tokens. */ +export interface ModelPriceTier extends ModelRates { + inputTokensAbove: number +} + +/** A model's prices. */ +export interface ModelPrices extends ModelRates { + /** An ISO 4217 code, for example `'USD'` or `'CNY'`. */ + currency: string + /** + * Higher prices for a call with more input, for example long context. + * Sorted by `inputTokensAbove`, from low to high. + */ + tiers?: ReadonlyArray +} + +/** + * One model from a provider's catalog, as a provider package's `./models` + * subpath exports it. A field the source does not list is `undefined`. + */ +export interface ModelRecord { + /** The model id to send. */ + id: string + name: string + /** The input kinds the model reads. */ + input?: ReadonlyArray + reasoning: ModelReasoning + prices?: ModelPrices + /** The most input and output tokens of one call. */ + contextWindow?: number + /** The most output tokens of one call. */ + maxOutputTokens?: number +} + +/** What a call cost, in `currency`. */ +export interface ModelCost { + currency: string + input: number + output: number + cacheRead: number + cacheWrite: number + total: number +} + +/** + * What a call cost, from the model's prices and the call's `usage`. + * `undefined` when the model has no prices, or when the call used tokens of a + * kind with no known price. + * + * The tier is the one with the highest `inputTokensAbove` below + * `usage.promptTokens` (all input, cached or not). + */ +export function modelCost( + model: Pick, + usage: TokenUsage, +): ModelCost | undefined { + const prices = model.prices + if (!prices) return undefined + const rates: ModelRates = + prices.tiers + ?.filter((tier) => usage.promptTokens > tier.inputTokensAbove) + .at(-1) ?? prices + const details = usage.promptTokensDetails + const cacheRead = details?.cachedTokens ?? 0 + const cacheWrite = details?.cacheWriteTokens ?? 0 + const cacheWrite1h = details?.cacheWrite1hTokens ?? 0 + // NaN marks tokens with no known price. It makes the total NaN. + const cost = (rate: number | undefined, tokens: number) => + tokens === 0 ? 0 : rate === undefined ? NaN : (rate / 1_000_000) * tokens + const parts = { + input: cost(rates.input, usage.promptTokens - cacheRead - cacheWrite), + output: cost(rates.output, usage.completionTokens), + cacheRead: cost(rates.cacheRead, cacheRead), + cacheWrite: + cost(rates.cacheWrite, cacheWrite - cacheWrite1h) + + cost(rates.cacheWrite1h, cacheWrite1h), + } + const total = parts.input + parts.output + parts.cacheRead + parts.cacheWrite + if (Number.isNaN(total)) return undefined + return { currency: prices.currency, ...parts, total } +} diff --git a/packages/ai/tests/model-catalog.test.ts b/packages/ai/tests/model-catalog.test.ts new file mode 100644 index 0000000000..bba1b6d270 --- /dev/null +++ b/packages/ai/tests/model-catalog.test.ts @@ -0,0 +1,68 @@ +import { describe, expect, it } from 'vitest' +import { modelCost } from '../src' +import type { ModelPrices, TokenUsage } from '../src' + +const flat: ModelPrices = { + currency: 'USD', + input: 3, + output: 15, + cacheRead: 0.3, + cacheWrite: 3.75, + cacheWrite1h: 6, +} + +const tiered: ModelPrices = { + ...flat, + tiers: [{ inputTokensAbove: 200_000, input: 6, output: 22.5 }], +} + +const usage = ( + promptTokens: number, + completionTokens: number, + promptTokensDetails?: TokenUsage['promptTokensDetails'], +): TokenUsage => ({ + promptTokens, + completionTokens, + totalTokens: promptTokens + completionTokens, + promptTokensDetails, +}) + +describe('modelCost', () => { + it('prices each kind of token, and splits the 1-hour cache write out', () => { + expect( + modelCost( + { prices: flat }, + usage(1_000_000, 1_000_000, { + cachedTokens: 100_000, + cacheWriteTokens: 300_000, + cacheWrite1hTokens: 100_000, + }), + ), + ).toEqual({ + currency: 'USD', + input: expect.closeTo(1.8), + output: 15, + cacheRead: expect.closeTo(0.03), + cacheWrite: expect.closeTo(0.75 + 0.6), + total: expect.closeTo(1.8 + 15 + 0.03 + 1.35), + }) + }) + + it('uses a tier only above its threshold', () => { + expect(modelCost({ prices: tiered }, usage(200_000, 0))?.input).toBeCloseTo( + 0.6, + ) + expect(modelCost({ prices: tiered }, usage(200_001, 0))?.input).toBeCloseTo( + 1.200006, + ) + }) + + it('is undefined when a price it needs is not known', () => { + // The tier has no cache read price, so a long call cannot price one. + expect( + modelCost({ prices: tiered }, usage(300_000, 0, { cachedTokens: 1 })), + ).toBeUndefined() + expect(modelCost({ prices: tiered }, usage(300_000, 0))).toBeDefined() + expect(modelCost({}, usage(10, 10))).toBeUndefined() + }) +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c8d7e6f184..4b99c35337 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,8 +29,8 @@ importers: specifier: ^10.1.0 version: 10.1.0 '@modelschemas/client': - specifier: ^0.1.0 - version: 0.1.0 + specifier: ^0.2.1 + version: 0.2.1 '@stylistic/eslint-plugin': specifier: ^5.10.0 version: 5.10.0(eslint@9.39.4(jiti@2.7.0)) @@ -3748,7 +3748,7 @@ importers: devDependencies: '@google/genai': specifier: ^2.10.0 - version: 2.10.0(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6)) + version: 2.10.0(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.6.5)) '@tanstack/ai': specifier: workspace:* version: link:../ai @@ -6948,8 +6948,8 @@ packages: resolution: {integrity: sha512-FdvwZU5N03O77Suh35JqjAqq5R1ZTEPFtwu6N4BgBq28qrQtrCnpbLL5U2pwYCuE194jAw0xnlOVmIqhfoYuUQ==} engines: {node: '>=20'} - '@modelschemas/client@0.1.0': - resolution: {integrity: sha512-MVtC9gsZcx05ITdqh6Krc8G9lMxne7mPO2VfX6cyjQbpGNWOe/dwyZuETVfwohC3Dnsnsrfi3oIRNQNc+xx87Q==} + '@modelschemas/client@0.2.1': + resolution: {integrity: sha512-y1055MBmvtHS9r3j0YnTAeP13AYNbZPwHvUeywMrNahGdm+mtTgi8FGDu8QFZ3hcF1gLu8h3qWtaGrFT/K7aIg==} '@msgpack/msgpack@3.1.3': resolution: {integrity: sha512-47XIizs9XZXvuJgoaJUIE2lFoID8ugvc0jzSHP+Ptfk8nTbnR8g788wv48N03Kx0UkAv559HWRQ3yzOgzlRNUA==} @@ -22726,6 +22726,19 @@ snapshots: - supports-color - utf-8-validate + '@google/genai@2.10.0(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.6.5))': + dependencies: + google-auth-library: 10.5.0 + p-retry: 4.6.2 + protobufjs: 7.6.4 + ws: 8.21.0 + optionalDependencies: + '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@4.6.5) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + '@graphql-typed-document-node/core@3.2.0(graphql@16.14.2)': dependencies: graphql: 16.14.2 @@ -23303,12 +23316,37 @@ snapshots: transitivePeerDependencies: - supports-color + '@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.6.5)': + dependencies: + '@hono/node-server': 1.19.17(hono@4.13.8) + ajv: 8.20.0 + ajv-formats: 3.0.1(ajv@8.20.0) + content-type: 1.0.5 + cors: 2.8.6 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + eventsource-parser: 3.1.1 + express: 5.2.1 + express-rate-limit: 8.7.0(express@5.2.1)(supports-color@7.2.0) + hono: 4.13.8 + jose: 6.2.12 + json-schema-typed: 8.0.2 + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 4.6.5 + zod-to-json-schema: 3.25.2(zod@4.6.5) + optionalDependencies: + '@cfworker/json-schema': 4.1.1 + transitivePeerDependencies: + - supports-color + optional: true + '@modelcontextprotocol/server@2.1.0': dependencies: '@modelcontextprotocol/core': 2.1.0 zod: 4.3.6 - '@modelschemas/client@0.1.0': {} + '@modelschemas/client@0.2.1': {} '@msgpack/msgpack@3.1.3': {} diff --git a/scripts/model-sync/changeset.ts b/scripts/model-sync/changeset.ts new file mode 100644 index 0000000000..47d2a468fc --- /dev/null +++ b/scripts/model-sync/changeset.ts @@ -0,0 +1,32 @@ +import { readFile, readdir, writeFile } from 'node:fs/promises' +import { resolve } from 'node:path' + +/** + * Create or update the `sync-models` changeset: a patch for each changed + * package. An existing one keeps its packages, so each sync step can add its + * own. + */ +export async function writeSyncChangeset( + root: string, + changedPackages: ReadonlySet, +): Promise { + const dir = resolve(root, '.changeset') + const existing = (await readdir(dir)).find( + (file) => file.startsWith('sync-models') && file.endsWith('.md'), + ) + const path = resolve(dir, existing ?? 'sync-models.md') + const packages = new Set(changedPackages) + if (existing) + for (const match of (await readFile(path, 'utf-8')).matchAll( + /'([^']+)':\s*patch/g, + )) + packages.add(match[1]!) + const lines = [...packages].sort().map((pkg) => `'${pkg}': patch`) + await writeFile( + path, + `---\n${lines.join('\n')}\n---\n\nUpdate model metadata\n`, + 'utf-8', + ) + console.log(`\nChangeset ${existing ? 'updated' : 'created'}: ${path}`) + console.log(` Packages: ${[...packages].sort().join(', ')}`) +} diff --git a/scripts/model-sync/client.ts b/scripts/model-sync/client.ts new file mode 100644 index 0000000000..c6b7314897 --- /dev/null +++ b/scripts/model-sync/client.ts @@ -0,0 +1,19 @@ +/** + * The modelschemas client for the model sync scripts. `MODELSCHEMAS_API_KEY` + * raises the rate limit. This file has no relative imports, so a script that + * runs with plain `node` can import it. + */ + +import { createModelschemasClient } from '@modelschemas/client' + +export function createSyncClient(options?: { + apiKey?: string + fetch?: typeof globalThis.fetch +}): ReturnType { + const apiKey = options?.apiKey ?? process.env.MODELSCHEMAS_API_KEY + return createModelschemasClient({ + baseUrl: 'https://modelschemas.com', + ...(apiKey ? { apiKey } : {}), + ...(options?.fetch ? { fetch: options.fetch } : {}), + }) +} diff --git a/scripts/model-sync/model-catalog.test.ts b/scripts/model-sync/model-catalog.test.ts new file mode 100644 index 0000000000..c36865a4e4 --- /dev/null +++ b/scripts/model-sync/model-catalog.test.ts @@ -0,0 +1,233 @@ +import { describe, expect, it } from 'vitest' +import { + buildRecords, + inputModalities, + isChatModel, + pricesFrom, + reasoningFrom, +} from './model-catalog' +import type { RateCard } from '@modelschemas/client' +import type { SchemaModel } from './model-catalog' + +const row = (fields: Partial = {}): SchemaModel => ({ + provider: 'p', + rawId: 'm', + displayName: null, + activity: 'chat', + deprecatedAt: null, + aliases: null, + contextWindow: null, + maxOutput: null, + modalities: { input: ['text'], output: ['text'] }, + capabilities: null, + reasoning: null, + requestMap: null, + pricing: null, + ...fields, +}) + +const card = (price: unknown, tables: RateCard['tables'] = {}): RateCard => ({ + inputs: {}, + tables, + price, + examples: [], + source: { url: 'https://example.com', hash: '', extractedAt: '' }, +}) + +const rate = (name: string) => ({ + if: [ + { '>': [{ var: name }, 0] }, + { + '*': [{ var: name }, { lookup: { table: 'rate', keys: ['base', name] } }], + }, + 0, + ], +}) + +describe('reasoningFrom', () => { + it('is false for a model that does not reason', () => { + expect(reasoningFrom(row())).toBe(false) + }) + + it("takes the source's level map when it has one", () => { + expect( + reasoningFrom( + row({ + reasoning: { + mode: 'effort', + mandatory: true, + efforts: ['instant', 'low', 'high'], + }, + requestMap: { + thinking: { + on: {}, + off: null, + levels: { + off: null, + minimal: null, + low: 'low', + medium: null, + high: 'high', + xhigh: null, + max: null, + }, + }, + }, + }), + ), + ).toEqual({ levels: { low: 'low', high: 'high' }, budget: false }) + }) + + it('maps efforts to levels, none to off, and skips default', () => { + expect( + reasoningFrom( + row({ + reasoning: { + mode: 'effort', + mandatory: false, + efforts: ['none', 'default', 'HIGH'], + }, + }), + ), + ).toEqual({ levels: { off: 'none', high: 'HIGH' }, budget: false }) + }) + + it('throws on an effort it does not know', () => { + expect(() => + reasoningFrom( + row({ + reasoning: { mode: 'effort', mandatory: null, efforts: ['ultra'] }, + }), + ), + ).toThrow("unknown reasoning effort 'ultra'") + }) + + it('invents no levels for a budget model', () => { + expect( + reasoningFrom(row({ reasoning: { mode: 'budget', mandatory: false } })), + ).toEqual({ + levels: {}, + budget: true, + }) + }) +}) + +describe('pricesFrom', () => { + it('has no prices when the row has no price card', () => { + expect(pricesFrom(row())).toBeUndefined() + }) + + it('reads each rate the card prices, and leaves the others undefined', () => { + const prices = pricesFrom( + row({ + pricing: card( + { + currency: [ + 'CNY', + { + '+': ['input_tokens', 'output_tokens'].map((name) => ({ + '*': [ + { var: name }, + { + lookup: { + table: 'rate', + keys: [ + { + if: [ + { '>': [{ var: 'input_tokens' }, 200000] }, + '200000', + 'base', + ], + }, + name, + ], + }, + }, + ], + })), + }, + ], + }, + { + rate: { + base: { input_tokens: 3e-6, output_tokens: 15e-6 }, + '200000': { input_tokens: 6e-6, output_tokens: 22.5e-6 }, + }, + }, + ), + }), + ) + expect(prices).toEqual({ + currency: 'CNY', + input: 3, + output: 15, + tiers: [{ inputTokensAbove: 200000, input: 6, output: 22.5 }], + }) + }) + + it('throws on a price operator it does not know', () => { + expect(() => pricesFrom(row({ pricing: card({ max: [1, 2] }) }))).toThrow( + "Unknown price operator 'max'", + ) + }) + + it('throws on a price summary, which has no rate card', () => { + expect(() => + pricesFrom( + row({ pricing: { currency: 'USD', per: 'token', inputPerMillion: 3 } }), + ), + ).toThrow('a price summary, not a rate card') + }) + + it('prices the 1-hour cache write with its own rate', () => { + expect( + pricesFrom( + row({ + pricing: card( + { + '+': [rate('cache_write_tokens'), rate('cache_write_1h_tokens')], + }, + { + rate: { + base: { + cache_write_tokens: 3.75e-6, + cache_write_1h_tokens: 6e-6, + }, + }, + }, + ), + }), + ), + ).toEqual({ currency: 'USD', cacheWrite: 3.75, cacheWrite1h: 6 }) + }) +}) + +describe('rows', () => { + it('keeps current chat models that write text', () => { + expect(isChatModel(row())).toBe(true) + expect(isChatModel(row({ activity: 'embeddings' }))).toBe(false) + expect(isChatModel(row({ deprecatedAt: 1 }))).toBe(false) + expect( + isChatModel(row({ modalities: { input: ['text'], output: ['image'] } })), + ).toBe(false) + }) + + it('maps input kinds, and throws on an unknown one', () => { + expect( + inputModalities(row({ modalities: { input: ['text', 'pdf', 'file'] } })), + ).toEqual(['text', 'document']) + expect(inputModalities(row({ modalities: null }))).toBeUndefined() + expect(() => + inputModalities(row({ modalities: { input: ['smell'] } })), + ).toThrow("unknown input modality 'smell'") + }) + + it('gives an alias its own record, and throws on a repeated id', () => { + expect( + buildRecords([row({ rawId: 'b', aliases: ['a'] })]).map((r) => r.id), + ).toEqual(['a', 'b']) + expect(() => buildRecords([row(), row()])).toThrow( + "Two rows have the id 'm'", + ) + }) +}) diff --git a/scripts/model-sync/model-catalog.ts b/scripts/model-sync/model-catalog.ts new file mode 100644 index 0000000000..9ceda8a424 --- /dev/null +++ b/scripts/model-sync/model-catalog.ts @@ -0,0 +1,320 @@ +/** + * Turns modelschemas rows (`GET /v1/models?pricing=1`) into the `ModelRecord`s + * that each provider package exports at its `./models` subpath. Each fact + * comes from the row. A fact the row does not have stays `undefined`, and a + * value this file does not know throws, so a new shape fails the sync instead + * of writing a wrong record. + */ + +import type { + Modality, + ModelPrices, + ModelRates, + ModelReasoning, + ModelRecord, + ReasoningLevel, + ReasoningLevels, +} from '@tanstack/ai' +import type { Model } from '@modelschemas/client' + +/** One catalog file: a modelschemas provider and the file it is written to. */ +export interface CatalogTarget { + /** The modelschemas provider id. */ + source: string + name: string + /** The generated file, from the repo root. */ + file: string +} + +/** Only providers with an adapter package have a catalog. */ +export const CATALOGS: ReadonlyArray = [ + { + source: 'amazon-bedrock', + name: 'Amazon Bedrock', + file: 'packages/ai-bedrock/src/models.ts', + }, + { + source: 'anthropic', + name: 'Anthropic', + file: 'packages/ai-anthropic/src/models.ts', + }, + { + source: 'azure', + name: 'Azure OpenAI', + file: 'packages/ai-openai/src/azure-models.ts', + }, + { + source: 'cloudflare-ai-gateway', + name: 'Cloudflare AI Gateway', + file: 'packages/ai-cloudflare/src/gateway-models.ts', + }, + { + source: 'cloudflare-workers-ai', + name: 'Cloudflare Workers AI', + file: 'packages/ai-cloudflare/src/models.ts', + }, + { + source: 'gemini', + name: 'Gemini', + file: 'packages/ai-gemini/src/models.ts', + }, + { + source: 'google-vertex', + name: 'Vertex AI', + file: 'packages/ai-vertex/src/models.ts', + }, + { source: 'grok', name: 'xAI', file: 'packages/ai-grok/src/models.ts' }, + { source: 'groq', name: 'Groq', file: 'packages/ai-groq/src/models.ts' }, + { + source: 'mistral', + name: 'Mistral', + file: 'packages/ai-mistral/src/models.ts', + }, + { + source: 'openai', + name: 'OpenAI', + file: 'packages/ai-openai/src/models.ts', + }, + { + source: 'openrouter', + name: 'OpenRouter', + file: 'packages/ai-openrouter/src/models.ts', + }, + { + source: 'vercel', + name: 'Vercel AI Gateway', + file: 'packages/ai-vercel-gateway/src/models.ts', + }, +] + +/** The fields of a modelschemas row that the sync reads. */ +export type SchemaModel = Pick< + Model, + | 'provider' + | 'rawId' + | 'displayName' + | 'activity' + | 'deprecatedAt' + | 'aliases' + | 'contextWindow' + | 'maxOutput' + | 'modalities' + | 'capabilities' + | 'reasoning' + | 'requestMap' + | 'pricing' +> + +/** A current chat model that writes text. */ +export function isChatModel(model: SchemaModel): boolean { + const output = model.modalities?.output + return ( + model.activity === 'chat' && + !model.deprecatedAt && + (!output?.length || output.includes('text')) + ) +} + +const INPUTS: Readonly> = { + text: 'text', + image: 'image', + audio: 'audio', + video: 'video', + pdf: 'document', + file: 'document', +} + +export function inputModalities( + model: SchemaModel, +): ReadonlyArray | undefined { + const kinds = model.modalities?.input + if (!kinds?.length) return undefined + return [ + ...new Set( + kinds.map((kind) => { + const modality = INPUTS[kind] + if (!modality) + throw new Error(`${model.rawId}: unknown input modality '${kind}'`) + return modality + }), + ), + ] +} + +const EFFORT_LEVELS: Readonly> = { + none: 'off', + minimal: 'minimal', + low: 'low', + medium: 'medium', + high: 'high', + xhigh: 'xhigh', + max: 'max', +} + +/** + * The reasoning data of a row: + * - `requestMap.thinking.levels`, when the row has it: each level with a value. + * - Else the `efforts`: each names its level (any case), and `none` is `off`. + * `default` (the provider's own default) is not a level. + * - Else no levels. `budget` says whether the model takes a token budget. + */ +export function reasoningFrom(model: SchemaModel): ModelReasoning { + const reasoning = model.reasoning + if (!reasoning?.mode && model.capabilities?.reasoning !== true) return false + const budget = reasoning?.mode === 'budget' + const map = model.requestMap?.thinking?.levels + if (map) + return { + levels: Object.fromEntries( + Object.entries(map).filter(([, value]) => typeof value === 'string'), + ), + budget, + } + const levels: ReasoningLevels = {} + for (const effort of reasoning?.efforts ?? []) { + if (effort === 'default') continue + const level = EFFORT_LEVELS[effort.toLowerCase()] + if (!level) + throw new Error(`${model.rawId}: unknown reasoning effort '${effort}'`) + levels[level] = effort + } + return { levels, budget } +} + +/** Run a modelschemas price expression. Any other operator throws. */ +export function evaluatePrice( + expression: unknown, + vars: Readonly>, + tables: Readonly>, +): number { + const run = (node: unknown): unknown => { + if (node === null || typeof node !== 'object') return node + if (Array.isArray(node)) return node.map(run) + const entries = Object.entries(node) + const [op, arg] = entries[0] ?? [] + if (entries.length !== 1 || op === undefined) + throw new Error(`Price operator with ${entries.length} keys`) + const args: Array = Array.isArray(arg) ? arg : [arg] + switch (op) { + case 'var': + return vars[String(args[0])] ?? 0 + case '+': + return args.reduce((sum, part) => sum + Number(run(part)), 0) + case '*': + return args.reduce( + (product, part) => product * Number(run(part)), + 1, + ) + case '>': + return Number(run(args[0])) > Number(run(args[1])) + case 'if': + for (let i = 0; i + 1 < args.length; i += 2) + if (run(args[i])) return run(args[i + 1]) + return args.length % 2 === 1 ? run(args[args.length - 1]) : 0 + case 'currency': + return run(args[1]) + case 'lookup': { + const { table, keys } = arg as { table: string; keys: Array } + let value: unknown = tables[table] + for (const key of keys) + value = + value && typeof value === 'object' + ? (value as Record)[String(run(key))] + : undefined + if (typeof value !== 'number') + throw new Error( + `Price lookup ${table}/${keys.join('/')} is not a number`, + ) + return value + } + default: + throw new Error(`Unknown price operator '${op}'`) + } + } + return Number(run(expression)) +} + +/** The `var` names an expression reads. */ +function varsOf(node: unknown, names = new Set()): Set { + if (node && typeof node === 'object') + for (const [key, value] of Object.entries(node)) + if (key === 'var') + names.add(String(Array.isArray(value) ? value[0] : value)) + else varsOf(value, names) + return names +} + +const RATE_VARS: Readonly> = { + input: 'input_tokens', + output: 'output_tokens', + cacheRead: 'cache_read_tokens', + cacheWrite: 'cache_write_tokens', + cacheWrite1h: 'cache_write_1h_tokens', +} + +/** + * The prices of a row per 1M tokens, from its price expression. Each rate is + * the cost of one more token on top of `inputTokens` input tokens. A rate the + * expression does not read stays `undefined`. No price expression: no prices. + */ +export function pricesFrom(model: SchemaModel): ModelPrices | undefined { + const card = model.pricing + if (!card) return undefined + // A compact summary comes only from a list call without `?pricing=1`. + if (!('price' in card)) + throw new Error(`${model.rawId}: a price summary, not a rate card`) + const { price, tables } = card + const read = varsOf(price) + const ratesAt = (inputTokens: number): ModelRates => { + const at = (extra: Record) => + evaluatePrice(price, { input_tokens: inputTokens, ...extra }, tables) + const base = at({}) + const rates: ModelRates = {} + for (const [field, name] of Object.entries(RATE_VARS) as Array< + [keyof ModelRates, string] + >) + if (read.has(name)) { + const more = name === 'input_tokens' ? inputTokens + 1 : 1 + // Rounded to 1e-6 USD per 1M tokens, so float noise does not reach the files. + rates[field] = Number(((at({ [name]: more }) - base) * 1e6).toFixed(6)) + } + return rates + } + const rate = tables.rate + const tiers = Object.keys(rate && typeof rate === 'object' ? rate : {}) + .filter((key) => /^\d+$/.test(key)) + .map(Number) + .sort((a, b) => a - b) + .map((above) => ({ inputTokensAbove: above, ...ratesAt(above + 1) })) + const currency = + price !== null && typeof price === 'object' && 'currency' in price + ? String((price as { currency: [unknown] }).currency[0]) + : 'USD' + return { + currency, + ...ratesAt(0), + ...(tiers.length > 0 ? { tiers } : {}), + } +} + +/** The records of one provider, sorted by id. An alias is a record of its own. */ +export function buildRecords( + rows: ReadonlyArray, +): Array { + const records = new Map() + for (const model of rows) { + const record = { + name: model.displayName ?? model.rawId, + input: inputModalities(model), + reasoning: reasoningFrom(model), + prices: pricesFrom(model), + contextWindow: model.contextWindow ?? undefined, + maxOutputTokens: model.maxOutput ?? undefined, + } + for (const id of [model.rawId, ...(model.aliases ?? [])]) { + if (records.has(id)) throw new Error(`Two rows have the id '${id}'`) + records.set(id, { id, ...record }) + } + } + return [...records.values()].sort((a, b) => a.id.localeCompare(b.id)) +} diff --git a/scripts/model-sync/modelschemas.test.ts b/scripts/model-sync/modelschemas.test.ts index 32059a5324..acae0d9879 100644 --- a/scripts/model-sync/modelschemas.test.ts +++ b/scripts/model-sync/modelschemas.test.ts @@ -56,7 +56,9 @@ describe('fetchSyncCatalogs', () => { it('fails on a payload with no models array', async () => { const client = clientReturning(() => json({ data: [] })) - await expect(fetchSyncCatalogs(client)).rejects.toThrow('no models array') + // From client 0.2, `listModels` maps `models` to brand the ids, so it + // throws before `parseCatalogModels` can name the missing array. + await expect(fetchSyncCatalogs(client)).rejects.toThrow() }) it('returns each native catalog next to openrouter', async () => { diff --git a/scripts/model-sync/modelschemas.ts b/scripts/model-sync/modelschemas.ts index 199c803c7c..864ef9ddab 100644 --- a/scripts/model-sync/modelschemas.ts +++ b/scripts/model-sync/modelschemas.ts @@ -2,28 +2,15 @@ * Thin wrapper around `@modelschemas/client` for the model sync scripts. */ -import { - createModelschemasClient, - getSchema, - listModels, -} from '@modelschemas/client' +import { getSchema, listModels } from '@modelschemas/client' import type { GetSchemaData } from '@modelschemas/client' import { isRecord, parseCatalogModels } from './catalog' +import { createSyncClient } from './client' import type { CatalogModel } from './catalog' import { SYNCED_PROVIDERS } from './provider-supports' import type { SyncedProvider } from './provider-supports' -export function createSyncClient(options?: { - apiKey?: string - fetch?: typeof globalThis.fetch -}): ReturnType { - const apiKey = options?.apiKey ?? process.env.MODELSCHEMAS_API_KEY - return createModelschemasClient({ - baseUrl: 'https://modelschemas.com', - ...(apiKey ? { apiKey } : {}), - ...(options?.fetch ? { fetch: options.fetch } : {}), - }) -} +export { createSyncClient } type SyncClient = ReturnType diff --git a/scripts/sync-model-catalogs.ts b/scripts/sync-model-catalogs.ts new file mode 100644 index 0000000000..a76e237907 --- /dev/null +++ b/scripts/sync-model-catalogs.ts @@ -0,0 +1,62 @@ +/** + * Writes each provider package's model catalog (its `./models` subpath) from + * modelschemas, and a patch changeset for each package whose models changed. + * One call. Set `MODELSCHEMAS_API_KEY` for a higher rate limit. + * + * Usage: + * node scripts/sync-model-catalogs.ts + */ + +import { existsSync } from 'node:fs' +import { readFile, writeFile } from 'node:fs/promises' +import { dirname, resolve } from 'node:path' +import { fileURLToPath, pathToFileURL } from 'node:url' +import { listModels } from '@modelschemas/client' +import { writeSyncChangeset } from './model-sync/changeset.ts' +import { + CATALOGS, + buildRecords, + isChatModel, +} from './model-sync/model-catalog.ts' +import { createSyncClient } from './model-sync/client.ts' + +const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..') + +const { data: body, error } = await listModels({ + client: createSyncClient(), + query: { activity: 'chat', pricing: '1', provenance: '0' }, +}) +if (!body) throw new Error(`modelschemas list failed: ${JSON.stringify(error)}`) +if (body.models.length !== body.count) + throw new Error( + `modelschemas sent ${body.models.length} of ${body.count} models`, + ) + +const changed = new Set() +for (const catalog of CATALOGS) { + const rows = body.models.filter( + (model) => model.provider === catalog.source && isChatModel(model), + ) + if (rows.length === 0) + throw new Error(`modelschemas has no chat models for '${catalog.source}'`) + const records = buildRecords(rows) + const file = resolve(ROOT, catalog.file) + const before: unknown = existsSync(file) + ? (await import(pathToFileURL(file).href)).models + : undefined + if (JSON.stringify(before) === JSON.stringify(records)) continue + await writeFile( + file, + `// Generated by scripts/sync-model-catalogs.ts from modelschemas. Do not edit. +import type { ModelRecord } from '@tanstack/ai' + +/** Every ${catalog.name} chat model on modelschemas.com, sorted by id. */ +export const models: ReadonlyArray = ${JSON.stringify(records)} +`, + ) + const packageJson = resolve(dirname(file), '..', 'package.json') + changed.add(JSON.parse(await readFile(packageJson, 'utf8')).name) + console.log(`${catalog.file}: ${records.length} models`) +} + +if (changed.size > 0) await writeSyncChangeset(ROOT, changed) diff --git a/scripts/sync-provider-models.ts b/scripts/sync-provider-models.ts index 39a1846c69..2534df77c8 100644 --- a/scripts/sync-provider-models.ts +++ b/scripts/sync-provider-models.ts @@ -28,9 +28,10 @@ */ import { execFileSync } from 'node:child_process' -import { readFile, readdir, writeFile } from 'node:fs/promises' +import { readFile, writeFile } from 'node:fs/promises' import { dirname, resolve } from 'node:path' import { fileURLToPath } from 'node:url' +import { writeSyncChangeset } from './model-sync/changeset' import { alreadySynced, outputsText, @@ -561,40 +562,10 @@ async function main() { } if (allChangedPackages.size > 0) { - await createChangeset(allChangedPackages) + await writeSyncChangeset(ROOT, allChangedPackages) } } -async function createChangeset(changedPackages: Set) { - const changesetDir = resolve(ROOT, '.changeset') - const existing = (await readdir(changesetDir)).find( - (f) => f.startsWith('sync-models') && f.endsWith('.md'), - ) - const changesetPath = resolve(changesetDir, existing ?? 'sync-models.md') - if (existing) { - const existingContent = await readFile(changesetPath, 'utf-8') - for (const match of existingContent.matchAll(/'([^']+)':\s*patch/g)) { - changedPackages.add(match[1]!) - } - } - await writeFile( - changesetPath, - buildChangesetContent(changedPackages), - 'utf-8', - ) - console.log( - `\nChangeset ${existing ? 'updated' : 'created'}: ${changesetPath}`, - ) - console.log(` Packages: ${Array.from(changedPackages).sort().join(', ')}`) -} -function buildChangesetContent(packages: Set): string { - const packageLines = Array.from(packages) - .sort() - .map((pkg) => `'${pkg}': patch`) - .join('\n') - return `---\n${packageLines}\n---\n\nUpdate model metadata from modelschemas\n` -} - main().catch((err) => { console.error(err) process.exit(1) diff --git a/skills/tanstack-ai/SKILL.md b/skills/tanstack-ai/SKILL.md index a443e3c963..936dd54656 100644 --- a/skills/tanstack-ai/SKILL.md +++ b/skills/tanstack-ai/SKILL.md @@ -86,6 +86,7 @@ lockfile shows which package manager to use. | Remember facts across conversations | `@tanstack/ai-memory` | `@tanstack/ai-memory#tanstack-ai-memory` | | Load SKILL.md files at runtime, for the app's own model | `@tanstack/ai-skills` | `@tanstack/ai-skills#ai-skills` | | Keep a long conversation inside the context window | `@tanstack/ai-compaction` | docs | +| List a provider's models with prices and limits, or price a run | the provider package's `./models` subpath, plus `modelCost` from `@tanstack/ai` | docs | | Port from the Vercel AI SDK, or upgrade from TanStack AI 0.x | see the `tanstack-ai-migration` skill | | Things that trip agents up: