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: