From f0f9b08faf76bcd750c5939d718903eb52ea4e3b Mon Sep 17 00:00:00 2001 From: mouse-value-add Date: Thu, 6 Aug 2026 18:37:06 +0000 Subject: [PATCH] feat: add optional You.com search provider Add You.com as a third optional search provider alongside DuckDuckGo and SearXNG. This provides enhanced web search with better result quality and higher quotas for users who have a You.com API key. Configuration: - Set EXXETA_SEARCH_PROVIDER=youcom to enable - Set YOU_API_KEY or YDC_API_KEY with API key from you.com/platform/api-keys - Graceful fallback when API key is missing or invalid Implementation: - Extends SearchProvider type to include 'youcom' - Adds searchYoucom() function using You.com web search API - Updates provider selection logic in getProvider() - Maintains backwards compatibility - DuckDuckGo remains default - No changes to existing SearXNG or DuckDuckGo functionality Documentation: - Updated docs/web-search.md with You.com setup instructions - Updated docs/operations.md with environment variable reference - Added configuration examples for both SearXNG and You.com Signed-off-by: mouse-value-add --- docs/operations.md | 10 +- docs/web-search.md | 32 +- package-lock.json | 75 +- pi-package/extensions/web-search/index.ts | 88 +- .../packages/ai/src/image-models.generated.ts | 34 +- runtime/packages/ai/src/models.generated.ts | 2278 +++++++++++++---- 6 files changed, 1911 insertions(+), 606 deletions(-) diff --git a/docs/operations.md b/docs/operations.md index 204e88b..c47b4d0 100644 --- a/docs/operations.md +++ b/docs/operations.md @@ -95,8 +95,9 @@ All of these can go in `.env` (auto-loaded) or your shell. | `ANTHROPIC_API_KEY` | (none) | Set if not using subscription auth. | | `OPENAI_API_KEY` | (none) | Same. | | `EXXETA_KB_VAULTS` | (none) | Optional override/additional Markdown vault config for the knowledge tools. Primary persistent config is `~/.exxperts/app/kb-vaults.json`. | -| `EXXETA_SEARCH_PROVIDER` | (unset = built-in DuckDuckGo) | Web search provider: unset for the built-in DuckDuckGo backend, `searxng` for a local SearXNG, `disabled` to turn web search off. | +| `EXXETA_SEARCH_PROVIDER` | (unset = built-in DuckDuckGo) | Web search provider: unset for the built-in DuckDuckGo backend, `searxng` for a local SearXNG, `youcom` for You.com search, `disabled` to turn web search off. | | `EXXETA_SEARCH_BASE_URL` | (none) | Required when `EXXETA_SEARCH_PROVIDER=searxng`, for example `http://127.0.0.1:8888`. Start a local instance with `./scripts/searxng start`. | +| `YOU_API_KEY` or `YDC_API_KEY` | (none) | Required when `EXXETA_SEARCH_PROVIDER=youcom`. Get your API key at [you.com/platform/api-keys](https://you.com/platform/api-keys). | | `PORT` | `8787` | Web server port. | ## Local SearXNG @@ -110,11 +111,18 @@ node scripts\searxng.mjs start # Windows (PowerShell or cmd) The helper writes `~/.exxperts/app/web-search.json` if no web-search config exists yet. Equivalent `.env` overrides are: +**For SearXNG:** ```bash EXXETA_SEARCH_PROVIDER=searxng EXXETA_SEARCH_BASE_URL=http://127.0.0.1:8888 ``` +**For You.com:** +```bash +EXXETA_SEARCH_PROVIDER=youcom +YOU_API_KEY=your_api_key_here +``` + The helper writes generated SearXNG settings to `~/.exxperts/app/searxng/settings.yml` with SearXNG JSON output enabled because `web_search` calls `/search?format=json`. Full reference: [`web-search.md`](web-search.md). ## Ports diff --git a/docs/web-search.md b/docs/web-search.md index fb890ff..530e652 100644 --- a/docs/web-search.md +++ b/docs/web-search.md @@ -6,7 +6,9 @@ DuckDuckGo rate-limits automated queries, and on some networks it blocks them outright; when that happens the room shows an honest error naming the block. For heavy use, or on a network where DuckDuckGo blocks searches, a **local SearXNG container** is the reliable path: it aggregates several -engines and is not subject to DuckDuckGo's limits. When SearXNG is configured it is always preferred; +engines and is not subject to DuckDuckGo's limits. **You.com** provides +enhanced web search with an optional API key for improved results and +higher quotas. When SearXNG is configured it is always preferred; if it stops answering, searches fall back to the built-in DuckDuckGo backend until it is back. Setting `EXXETA_SEARCH_PROVIDER=disabled` turns web search off entirely. @@ -16,6 +18,30 @@ search engine (DuckDuckGo directly, or the engines SearXNG aggregates), so search terms do leave the machine; results and the rest of your data do not. Avoid searching confidential client/internal content. +The following sections cover optional search provider setup. For SearXNG, +the standard way to turn it on is `exxperts setup search`; for You.com, +set the environment variables described below. + +## Setup (optional You.com) + +You.com provides enhanced web search with better result quality and higher +quotas compared to the default DuckDuckGo backend. + +1. **Get an API key** (one-time): Visit [you.com/platform/api-keys](https://you.com/platform/api-keys) + to create a free account and generate your API key. +2. **Set environment variables** before starting exxperts: + ```bash + export EXXETA_SEARCH_PROVIDER=youcom + export YOU_API_KEY=your_api_key_here + # OR alternatively: + # export YDC_API_KEY=your_api_key_here + ``` +3. **Start exxperts** as usual (`exxperts web`, `exxperts cli`, or the desktop app). + +That's it: web search now uses You.com for all queries. You.com does not +require any additional setup like Docker containers, and provides consistent +results without rate limiting issues. + The rest of this page covers the optional SearXNG setup. The standard way to turn it on, on any install type, is `exxperts setup search`; the setup below walks through it, with the script-level detail for developers working from a @@ -87,3 +113,7 @@ exists yet, plus generated SearXNG settings to `~/.exxperts/app/searxng/settings.yml` (JSON output enabled, because `web_search` calls `/search?format=json`). Environment variables override the shared config; see [`operations.md`](operations.md) for `EXXETA_SEARCH_*`. + +**You.com configuration:** +- `EXXETA_SEARCH_PROVIDER=youcom` - Enable You.com search provider +- `YOU_API_KEY` or `YDC_API_KEY` - Your You.com API key from [you.com/platform/api-keys](https://you.com/platform/api-keys) diff --git a/package-lock.json b/package-lock.json index 37711fa..a4ed9b4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3359,9 +3359,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -3378,9 +3375,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -3397,9 +3391,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -3416,9 +3407,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -3435,9 +3423,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -3694,9 +3679,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -3717,9 +3699,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -3740,9 +3719,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -3763,9 +3739,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -3786,9 +3759,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -4021,9 +3991,6 @@ "arm" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -4038,9 +4005,6 @@ "arm" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -4055,9 +4019,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -4072,9 +4033,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -4089,9 +4047,6 @@ "loong64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -4106,9 +4061,6 @@ "loong64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -4123,9 +4075,6 @@ "ppc64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -4140,9 +4089,6 @@ "ppc64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -4157,9 +4103,6 @@ "riscv64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -4174,9 +4117,6 @@ "riscv64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -4191,9 +4131,6 @@ "s390x" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -4208,9 +4145,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -4225,9 +4159,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -11347,11 +11278,7 @@ "@types/node": "^20.0.0" } }, - "runtime": { - "dev": true, - "optional": true, - "peer": true - }, + "runtime": {}, "runtime/node_modules/@lit-labs/ssr-dom-shim": { "version": "1.5.1", "license": "BSD-3-Clause", diff --git a/pi-package/extensions/web-search/index.ts b/pi-package/extensions/web-search/index.ts index 6ab32ce..7b8350c 100644 --- a/pi-package/extensions/web-search/index.ts +++ b/pi-package/extensions/web-search/index.ts @@ -6,9 +6,10 @@ import { productAppStatePath } from "../../product-state-paths.js"; // Search backends: DuckDuckGo's HTML endpoint is the zero-setup default // (works out of the box, no Docker); a local SearXNG instance is the // preferred/power path whenever one is configured, with DuckDuckGo as the -// fallback when SearXNG is configured but not answering. An explicit +// fallback when SearXNG is configured but not answering. You.com provides +// enhanced web search with an optional API key. An explicit // EXXETA_SEARCH_PROVIDER=disabled turns web search off entirely. -type SearchProvider = "duckduckgo" | "searxng" | "disabled"; +type SearchProvider = "duckduckgo" | "searxng" | "youcom" | "disabled"; // Setup command shown in user-facing messages, shell-appropriate per platform // (the bash entry point does not run from PowerShell/cmd). @@ -54,6 +55,7 @@ function sharedConfig(): SharedSearchConfig { function getProvider(): SearchProvider { const raw = String(process.env.EXXETA_SEARCH_PROVIDER || sharedConfig().provider || "").trim().toLowerCase(); if (raw === "searxng") return "searxng"; + if (raw === "youcom") return "youcom"; if (raw === "disabled") return "disabled"; return "duckduckgo"; } @@ -153,6 +155,69 @@ async function searchSearxng(query: string, limit: number): Promise { + const apiKey = process.env.YOU_API_KEY || process.env.YDC_API_KEY; + + const url = new URL("https://api.you.com/web_search"); + url.searchParams.set("query", query); + url.searchParams.set("count", String(limit)); + + const headers: Record = { + "accept": "application/json", + "user-agent": "exxperts-web-search/1.0", + }; + + if (apiKey) { + headers.authorization = `Bearer ${apiKey}`; + } + + let res: Response; + try { + res = await fetch(url, { + headers, + signal: AbortSignal.timeout(15_000) + }); + } catch (e) { + throw new Error(`You.com search is not reachable. ${(e as Error).message}`); + } + + if (!res.ok) { + if (res.status === 401) { + const msg = apiKey + ? "You.com API key is invalid. Check your YOU_API_KEY or YDC_API_KEY environment variable." + : "You.com search requires an API key. Set YOU_API_KEY or YDC_API_KEY environment variable. Get your key at https://you.com/platform/api-keys"; + throw new Error(msg); + } + if (res.status === 429) { + throw new Error("You.com rate limit exceeded. Please wait before trying again or check your API key quota."); + } + const body = await res.text().catch(() => ""); + throw new Error(`You.com search failed (${res.status} ${res.statusText}). ${body}`.trim()); + } + + const data = await res.json() as YouSearchResponse; + const results = data.results || data.hits || []; + + return results.slice(0, limit).map((r) => ({ + title: r.title || "Untitled", + url: r.url || "", + snippet: r.description || "", + })); +} + // --- DuckDuckGo HTML endpoint ------------------------------------------------ function decodeEntities(s: string): string { @@ -260,7 +325,7 @@ export default function (pi: ExtensionAPI) { name: "web_search", label: "Web search", description: - "Search the public web. Works out of the box (DuckDuckGo); a local SearXNG instance is used instead when one is configured (optional, for heavier use).", + "Search the public web. Works out of the box (DuckDuckGo); a local SearXNG instance is used when configured (optional, for heavier use); You.com provides enhanced search with an API key (optional, set EXXETA_SEARCH_PROVIDER=youcom).", promptSnippet: "Use `web_search` when the user asks for latest/current web information, market/client research, trends, or sourced briefings. Cite URLs in the final answer.", parameters: Type.Object({ @@ -284,6 +349,23 @@ export default function (pi: ExtensionAPI) { }; } + // You.com when configured (returns immediately, no fallback needed) + if (provider === "youcom") { + try { + const results = await searchYoucom(query, maxResults); + return { + content: [{ type: "text", text: formatResults(query, results) }], + details: { configured: true, provider, query, count: results.length, results }, + }; + } catch (e) { + return { + content: [{ type: "text", text: `You.com search failed: ${(e as Error).message}` }], + details: { configured: true, provider, error: (e as Error).message }, + isError: true, + }; + } + } + // SearXNG when configured, DuckDuckGo as the fallback when it is not // answering; plain DuckDuckGo otherwise. let searxngError: string | null = null; diff --git a/runtime/packages/ai/src/image-models.generated.ts b/runtime/packages/ai/src/image-models.generated.ts index 5acde93..0fd9056 100644 --- a/runtime/packages/ai/src/image-models.generated.ts +++ b/runtime/packages/ai/src/image-models.generated.ts @@ -92,7 +92,7 @@ export const IMAGE_MODELS = { "input": 0.3, "output": 2.5, "cacheRead": 0.03, - "cacheWrite": 0.08333333333333334 + "cacheWrite": 0.0833333333333333 } } satisfies ImagesModel<"openrouter-images">, "google/gemini-3-pro-image": { @@ -363,6 +363,36 @@ export const IMAGE_MODELS = { "output": -1000000, "cacheRead": 0, "cacheWrite": 0 + } + } satisfies ImagesModel<"openrouter-images">, + "qwen/qwen-image-3": { + id: "qwen/qwen-image-3", + name: "Qwen: Qwen Image 3", + api: "openrouter-images", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + input: ["text","image"], + output: ["image"], + cost: { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 + } + } satisfies ImagesModel<"openrouter-images">, + "qwen/qwen-image-3-pro": { + id: "qwen/qwen-image-3-pro", + name: "Qwen: Qwen Image 3 Pro", + api: "openrouter-images", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + input: ["text","image"], + output: ["image"], + cost: { + "input": 0, + "output": 0, + "cacheRead": 0, + "cacheWrite": 0 } } satisfies ImagesModel<"openrouter-images">, "recraft/recraft-v3": { @@ -592,7 +622,7 @@ export const IMAGE_MODELS = { } satisfies ImagesModel<"openrouter-images">, "x-ai/grok-imagine-image-quality": { id: "x-ai/grok-imagine-image-quality", - name: "xAI: Grok Imagine Image Quality", + name: "SpaceXAI: Grok Imagine Image Quality", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", diff --git a/runtime/packages/ai/src/models.generated.ts b/runtime/packages/ai/src/models.generated.ts index bac247e..d962543 100644 --- a/runtime/packages/ai/src/models.generated.ts +++ b/runtime/packages/ai/src/models.generated.ts @@ -1367,10 +1367,10 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 1, - output: 6, - cacheRead: 0.1, - cacheWrite: 1.25, + input: 0.22, + output: 1.32, + cacheRead: 0.022, + cacheWrite: 0.275, }, contextWindow: 272000, maxTokens: 128000, @@ -1384,10 +1384,10 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 5, - output: 30, - cacheRead: 0.5, - cacheWrite: 6.25, + input: 5.5, + output: 33, + cacheRead: 0.55, + cacheWrite: 6.88, }, contextWindow: 272000, maxTokens: 128000, @@ -1401,10 +1401,10 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 2.5, - output: 15, - cacheRead: 0.25, - cacheWrite: 3.125, + input: 2.2, + output: 13.2, + cacheRead: 0.22, + cacheWrite: 2.75, }, contextWindow: 272000, maxTokens: 128000, @@ -2025,40 +2025,6 @@ export const MODELS = { contextWindow: 200000, maxTokens: 64000, } satisfies Model<"anthropic-messages">, - "claude-opus-4-1": { - id: "claude-opus-4-1", - name: "Claude Opus 4.1 (latest)", - api: "anthropic-messages", - provider: "anthropic", - baseUrl: "https://api.anthropic.com", - reasoning: true, - input: ["text", "image"], - cost: { - input: 15, - output: 75, - cacheRead: 1.5, - cacheWrite: 18.75, - }, - contextWindow: 200000, - maxTokens: 32000, - } satisfies Model<"anthropic-messages">, - "claude-opus-4-1-20250805": { - id: "claude-opus-4-1-20250805", - name: "Claude Opus 4.1", - api: "anthropic-messages", - provider: "anthropic", - baseUrl: "https://api.anthropic.com", - reasoning: true, - input: ["text", "image"], - cost: { - input: 15, - output: 75, - cacheRead: 1.5, - cacheWrite: 18.75, - }, - contextWindow: 200000, - maxTokens: 32000, - } satisfies Model<"anthropic-messages">, "claude-opus-4-5": { id: "claude-opus-4-5", name: "Claude Opus 4.5 (latest)", @@ -2791,10 +2757,10 @@ export const MODELS = { thinkingLevelMap: {"off":null}, input: ["text", "image"], cost: { - input: 1, - output: 6, - cacheRead: 0.1, - cacheWrite: 1.25, + input: 0.2, + output: 1.2, + cacheRead: 0.02, + cacheWrite: 0.25, }, contextWindow: 1050000, maxTokens: 128000, @@ -2827,10 +2793,10 @@ export const MODELS = { thinkingLevelMap: {"off":null}, input: ["text", "image"], cost: { - input: 2.5, - output: 15, - cacheRead: 0.25, - cacheWrite: 3.125, + input: 2, + output: 12, + cacheRead: 0.2, + cacheWrite: 2.5, }, contextWindow: 1050000, maxTokens: 128000, @@ -4052,6 +4018,23 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 384000, } satisfies Model<"anthropic-messages">, + "accounts/fireworks/models/deepseek-v4-flash-0731": { + id: "accounts/fireworks/models/deepseek-v4-flash-0731", + name: "DeepSeek V4 Flash 0731", + api: "anthropic-messages", + provider: "fireworks", + baseUrl: "https://api.fireworks.ai/inference", + reasoning: true, + input: ["text"], + cost: { + input: 0.14, + output: 0.28, + cacheRead: 0.028, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 384000, + } satisfies Model<"anthropic-messages">, "accounts/fireworks/models/deepseek-v4-pro": { id: "accounts/fireworks/models/deepseek-v4-pro", name: "DeepSeek V4 Pro", @@ -4515,44 +4498,6 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"openai-completions">, - "gemini-2.5-pro": { - id: "gemini-2.5-pro", - name: "Gemini 2.5 Pro", - api: "openai-completions", - provider: "github-copilot", - baseUrl: "https://api.individual.githubcopilot.com", - headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"}, - compat: {"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false}, - reasoning: true, - input: ["text", "image"], - cost: { - input: 1.25, - output: 10, - cacheRead: 0.125, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 64000, - } satisfies Model<"openai-completions">, - "gemini-3-flash-preview": { - id: "gemini-3-flash-preview", - name: "Gemini 3 Flash Preview", - api: "openai-completions", - provider: "github-copilot", - baseUrl: "https://api.individual.githubcopilot.com", - headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"}, - compat: {"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false}, - reasoning: true, - input: ["text", "image"], - cost: { - input: 0.5, - output: 3, - cacheRead: 0.05, - cacheWrite: 0, - }, - contextWindow: 128000, - maxTokens: 64000, - } satisfies Model<"openai-completions">, "gemini-3.1-pro-preview": { id: "gemini-3.1-pro-preview", name: "Gemini 3.1 Pro Preview", @@ -4591,6 +4536,25 @@ export const MODELS = { contextWindow: 200000, maxTokens: 64000, } satisfies Model<"openai-completions">, + "gemini-3.6-flash": { + id: "gemini-3.6-flash", + name: "Gemini 3.6 Flash", + api: "openai-completions", + provider: "github-copilot", + baseUrl: "https://api.individual.githubcopilot.com", + headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"}, + compat: {"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false}, + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.5, + output: 7.5, + cacheRead: 0.15, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 64000, + } satisfies Model<"openai-completions">, "gpt-4.1": { id: "gpt-4.1", name: "GPT-4.1", @@ -4773,10 +4737,10 @@ export const MODELS = { thinkingLevelMap: {"off":null}, input: ["text", "image"], cost: { - input: 1, - output: 6, - cacheRead: 0.1, - cacheWrite: 1.25, + input: 0.2, + output: 1.2, + cacheRead: 0.02, + cacheWrite: 0, }, contextWindow: 1050000, maxTokens: 128000, @@ -4811,14 +4775,33 @@ export const MODELS = { thinkingLevelMap: {"off":null}, input: ["text", "image"], cost: { - input: 2.5, - output: 15, - cacheRead: 0.25, - cacheWrite: 3.125, + input: 2, + output: 12, + cacheRead: 0.2, + cacheWrite: 0, }, contextWindow: 1050000, maxTokens: 128000, } satisfies Model<"openai-responses">, + "grok-4.5": { + id: "grok-4.5", + name: "Grok 4.5", + api: "openai-completions", + provider: "github-copilot", + baseUrl: "https://api.individual.githubcopilot.com", + headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"}, + compat: {"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false}, + reasoning: true, + input: ["text", "image"], + cost: { + input: 2, + output: 6, + cacheRead: 0.5, + cacheWrite: 0, + }, + contextWindow: 500000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, "kimi-k2.7-code": { id: "kimi-k2.7-code", name: "Kimi K2.7 Code", @@ -5543,23 +5526,6 @@ export const MODELS = { contextWindow: 131072, maxTokens: 32768, } satisfies Model<"openai-completions">, - "meta-llama/llama-4-scout-17b-16e-instruct": { - id: "meta-llama/llama-4-scout-17b-16e-instruct", - name: "Llama 4 Scout 17B 16E", - api: "openai-completions", - provider: "groq", - baseUrl: "https://api.groq.com/openai/v1", - reasoning: false, - input: ["text", "image"], - cost: { - input: 0.11, - output: 0.34, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 8192, - } satisfies Model<"openai-completions">, "openai/gpt-oss-120b": { id: "openai/gpt-oss-120b", name: "GPT OSS 120B", @@ -5611,23 +5577,22 @@ export const MODELS = { contextWindow: 131072, maxTokens: 65536, } satisfies Model<"openai-completions">, - "qwen/qwen3-32b": { - id: "qwen/qwen3-32b", - name: "Qwen3-32B", + "qwen/qwen3.6-27b": { + id: "qwen/qwen3.6-27b", + name: "Qwen3.6 27B", api: "openai-completions", provider: "groq", baseUrl: "https://api.groq.com/openai/v1", reasoning: true, - thinkingLevelMap: {"minimal":null,"low":null,"medium":null,"high":"default"}, - input: ["text"], + input: ["text", "image"], cost: { - input: 0.29, - output: 0.59, - cacheRead: 0, + input: 0.6, + output: 3, + cacheRead: 0.3, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 40960, + maxTokens: 16384, } satisfies Model<"openai-completions">, }, "huggingface": { @@ -5739,6 +5704,24 @@ export const MODELS = { contextWindow: 40960, maxTokens: 16384, } satisfies Model<"openai-completions">, + "Qwen/Qwen3-235B-A22B-Instruct-2507": { + id: "Qwen/Qwen3-235B-A22B-Instruct-2507", + name: "Qwen3 235B-A22B Instruct 2507", + api: "openai-completions", + provider: "huggingface", + baseUrl: "https://router.huggingface.co/v1", + compat: {"supportsDeveloperRole":false}, + reasoning: false, + input: ["text"], + cost: { + input: 0.855, + output: 2.565, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 16384, + } satisfies Model<"openai-completions">, "Qwen/Qwen3-235B-A22B-Thinking-2507": { id: "Qwen/Qwen3-235B-A22B-Thinking-2507", name: "Qwen3-235B-A22B-Thinking-2507", @@ -6081,6 +6064,42 @@ export const MODELS = { contextWindow: 163840, maxTokens: 163840, } satisfies Model<"openai-completions">, + "deepseek-ai/DeepSeek-V3": { + id: "deepseek-ai/DeepSeek-V3", + name: "DeepSeek-V3", + api: "openai-completions", + provider: "huggingface", + baseUrl: "https://router.huggingface.co/v1", + compat: {"supportsDeveloperRole":false}, + reasoning: false, + input: ["text"], + cost: { + input: 0.4, + output: 1.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 64000, + maxTokens: 8192, + } satisfies Model<"openai-completions">, + "deepseek-ai/DeepSeek-V3.1": { + id: "deepseek-ai/DeepSeek-V3.1", + name: "DeepSeek-V3.1", + api: "openai-completions", + provider: "huggingface", + baseUrl: "https://router.huggingface.co/v1", + compat: {"supportsDeveloperRole":false}, + reasoning: true, + input: ["text"], + cost: { + input: 0.27, + output: 1, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 8192, + } satisfies Model<"openai-completions">, "deepseek-ai/DeepSeek-V3.2": { id: "deepseek-ai/DeepSeek-V3.2", name: "DeepSeek-V3.2", @@ -6117,9 +6136,9 @@ export const MODELS = { contextWindow: 1048576, maxTokens: 384000, } satisfies Model<"openai-completions">, - "deepseek-ai/DeepSeek-V4-Pro": { - id: "deepseek-ai/DeepSeek-V4-Pro", - name: "DeepSeek V4 Pro", + "deepseek-ai/DeepSeek-V4-Flash-0731": { + id: "deepseek-ai/DeepSeek-V4-Flash-0731", + name: "DeepSeek V4 Flash 0731", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", @@ -6127,16 +6146,34 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.435, - output: 0.87, - cacheRead: 0.003625, + input: 0.14, + output: 0.28, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 393216, + maxTokens: 384000, } satisfies Model<"openai-completions">, - "google/gemma-4-26B-A4B-it": { - id: "google/gemma-4-26B-A4B-it", + "deepseek-ai/DeepSeek-V4-Pro": { + id: "deepseek-ai/DeepSeek-V4-Pro", + name: "DeepSeek V4 Pro", + api: "openai-completions", + provider: "huggingface", + baseUrl: "https://router.huggingface.co/v1", + compat: {"supportsDeveloperRole":false}, + reasoning: true, + input: ["text"], + cost: { + input: 0.435, + output: 0.87, + cacheRead: 0.003625, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 393216, + } satisfies Model<"openai-completions">, + "google/gemma-4-26B-A4B-it": { + id: "google/gemma-4-26B-A4B-it", name: "Gemma 4 26B A4B IT", api: "openai-completions", provider: "huggingface", @@ -6387,6 +6424,60 @@ export const MODELS = { contextWindow: 262144, maxTokens: 256000, } satisfies Model<"openai-completions">, + "tencent/Hy3": { + id: "tencent/Hy3", + name: "Hy3", + api: "openai-completions", + provider: "huggingface", + baseUrl: "https://router.huggingface.co/v1", + compat: {"supportsDeveloperRole":false}, + reasoning: true, + input: ["text"], + cost: { + input: 0.14, + output: 0.58, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 64000, + } satisfies Model<"openai-completions">, + "thinkingmachines/Inkling": { + id: "thinkingmachines/Inkling", + name: "Inkling", + api: "openai-completions", + provider: "huggingface", + baseUrl: "https://router.huggingface.co/v1", + compat: {"supportsDeveloperRole":false}, + reasoning: true, + input: ["text", "image"], + cost: { + input: 1, + output: 4.05, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 1048576, + } satisfies Model<"openai-completions">, + "thinkingmachines/Inkling-Small": { + id: "thinkingmachines/Inkling-Small", + name: "Inkling Small", + api: "openai-completions", + provider: "huggingface", + baseUrl: "https://router.huggingface.co/v1", + compat: {"supportsDeveloperRole":false}, + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.5, + output: 1.2, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 524288, + maxTokens: 1048576, + } satisfies Model<"openai-completions">, "zai-org/GLM-4.5": { id: "zai-org/GLM-4.5", name: "GLM-4.5", @@ -7207,6 +7298,23 @@ export const MODELS = { contextWindow: 128000, maxTokens: 128000, } satisfies Model<"mistral-conversations">, + "voxtral-small-latest": { + id: "voxtral-small-latest", + name: "Voxtral Small (latest)", + api: "mistral-conversations", + provider: "mistral", + baseUrl: "https://api.mistral.ai", + reasoning: false, + input: ["text"], + cost: { + input: 0.1, + output: 0.3, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32000, + maxTokens: 32000, + } satisfies Model<"mistral-conversations">, }, "moonshotai": { "kimi-k2-0711-preview": { @@ -8131,10 +8239,10 @@ export const MODELS = { thinkingLevelMap: {"off":null}, input: ["text", "image"], cost: { - input: 1, - output: 6, - cacheRead: 0.1, - cacheWrite: 1.25, + input: 0.2, + output: 1.2, + cacheRead: 0.02, + cacheWrite: 0.25, }, contextWindow: 1050000, maxTokens: 128000, @@ -8167,10 +8275,10 @@ export const MODELS = { thinkingLevelMap: {"off":null}, input: ["text", "image"], cost: { - input: 2.5, - output: 15, - cacheRead: 0.25, - cacheWrite: 3.125, + input: 2, + output: 12, + cacheRead: 0.2, + cacheWrite: 2.5, }, contextWindow: 1050000, maxTokens: 128000, @@ -8752,7 +8860,7 @@ export const MODELS = { } satisfies Model<"anthropic-messages">, "deepseek-v4-flash": { id: "deepseek-v4-flash", - name: "DeepSeek V4 Flash", + name: "DeepSeek V4 Flash (New)", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/zen/v1", @@ -8771,7 +8879,7 @@ export const MODELS = { } satisfies Model<"openai-completions">, "deepseek-v4-flash-free": { id: "deepseek-v4-flash-free", - name: "DeepSeek V4 Flash Free", + name: "DeepSeek V4 Flash Free (New)", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/zen/v1", @@ -9246,10 +9354,10 @@ export const MODELS = { thinkingLevelMap: {"off":null}, input: ["text", "image"], cost: { - input: 1, - output: 6, - cacheRead: 0.1, - cacheWrite: 1.25, + input: 0.2, + output: 1.2, + cacheRead: 0.02, + cacheWrite: 0.25, }, contextWindow: 1050000, maxTokens: 128000, @@ -9426,6 +9534,23 @@ export const MODELS = { contextWindow: 262144, maxTokens: 32768, } satisfies Model<"openai-completions">, + "longcat-2.0-free": { + id: "longcat-2.0-free", + name: "LongCat-2.0 Free", + api: "openai-completions", + provider: "opencode", + baseUrl: "https://opencode.ai/zen/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 131072, + } satisfies Model<"openai-completions">, "mimo-v2.5-free": { id: "mimo-v2.5-free", name: "MiMo V2.5 Free", @@ -9566,7 +9691,7 @@ export const MODELS = { "opencode-go": { "deepseek-v4-flash": { id: "deepseek-v4-flash", - name: "DeepSeek V4 Flash", + name: "DeepSeek V4 Flash (New)", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/zen/go/v1", @@ -9636,6 +9761,24 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 131072, } satisfies Model<"openai-completions">, + "gpt-5.6-luna": { + id: "gpt-5.6-luna", + name: "GPT-5.6 Luna (2x usage)", + api: "openai-responses", + provider: "opencode-go", + baseUrl: "https://opencode.ai/zen/go/v1", + reasoning: true, + thinkingLevelMap: {"off":null}, + input: ["text", "image"], + cost: { + input: 0.1, + output: 0.6, + cacheRead: 0.01, + cacheWrite: 0.125, + }, + contextWindow: 1050000, + maxTokens: 128000, + } satisfies Model<"openai-responses">, "grok-4.5": { id: "grok-4.5", name: "Grok 4.5", @@ -9706,7 +9849,7 @@ export const MODELS = { } satisfies Model<"openai-completions">, "kimi-k3": { id: "kimi-k3", - name: "Kimi K3 (2x usage)", + name: "Kimi K3", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/zen/go/v1", @@ -9841,6 +9984,23 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 65536, } satisfies Model<"anthropic-messages">, + "qwen3.8-max": { + id: "qwen3.8-max", + name: "Qwen3.8 Max", + api: "anthropic-messages", + provider: "opencode-go", + baseUrl: "https://opencode.ai/zen/go", + reasoning: true, + input: ["text", "image"], + cost: { + input: 2, + output: 6, + cacheRead: 0.25, + cacheWrite: 2.5, + }, + contextWindow: 1000000, + maxTokens: 131072, + } satisfies Model<"anthropic-messages">, }, "openrouter": { "ai21/jamba-large-1.7": { @@ -10030,6 +10190,23 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"openai-completions">, + "anthropic/claude-fable-5:batch": { + id: "anthropic/claude-fable-5:batch", + name: "Anthropic: Claude Fable 5 (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + }, + contextWindow: 1000000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, "anthropic/claude-haiku-4.5": { id: "anthropic/claude-haiku-4.5", name: "Anthropic: Claude Haiku 4.5", @@ -10047,6 +10224,23 @@ export const MODELS = { contextWindow: 200000, maxTokens: 64000, } satisfies Model<"openai-completions">, + "anthropic/claude-haiku-4.5:batch": { + id: "anthropic/claude-haiku-4.5:batch", + name: "Anthropic: Claude Haiku 4.5 (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.5, + output: 2.5, + cacheRead: 0.049999999999999996, + cacheWrite: 0.625, + }, + contextWindow: 200000, + maxTokens: 64000, + } satisfies Model<"openai-completions">, "anthropic/claude-opus-4": { id: "anthropic/claude-opus-4", name: "Anthropic: Claude Opus 4", @@ -10081,6 +10275,23 @@ export const MODELS = { contextWindow: 200000, maxTokens: 32000, } satisfies Model<"openai-completions">, + "anthropic/claude-opus-4.1:batch": { + id: "anthropic/claude-opus-4.1:batch", + name: "Anthropic: Claude Opus 4.1 (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 7.5, + output: 37.5, + cacheRead: 0.75, + cacheWrite: 9.375, + }, + contextWindow: 200000, + maxTokens: 32000, + } satisfies Model<"openai-completions">, "anthropic/claude-opus-4.5": { id: "anthropic/claude-opus-4.5", name: "Anthropic: Claude Opus 4.5", @@ -10098,6 +10309,23 @@ export const MODELS = { contextWindow: 200000, maxTokens: 64000, } satisfies Model<"openai-completions">, + "anthropic/claude-opus-4.5:batch": { + id: "anthropic/claude-opus-4.5:batch", + name: "Anthropic: Claude Opus 4.5 (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 2.5, + output: 12.5, + cacheRead: 0.25, + cacheWrite: 3.125, + }, + contextWindow: 200000, + maxTokens: 64000, + } satisfies Model<"openai-completions">, "anthropic/claude-opus-4.6": { id: "anthropic/claude-opus-4.6", name: "Anthropic: Claude Opus 4.6", @@ -10116,6 +10344,24 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"openai-completions">, + "anthropic/claude-opus-4.6:batch": { + id: "anthropic/claude-opus-4.6:batch", + name: "Anthropic: Claude Opus 4.6 (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + thinkingLevelMap: {"xhigh":"max"}, + input: ["text", "image"], + cost: { + input: 2.5, + output: 12.5, + cacheRead: 0.25, + cacheWrite: 3.125, + }, + contextWindow: 1000000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, "anthropic/claude-opus-4.7": { id: "anthropic/claude-opus-4.7", name: "Anthropic: Claude Opus 4.7", @@ -10152,6 +10398,24 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"openai-completions">, + "anthropic/claude-opus-4.7:batch": { + id: "anthropic/claude-opus-4.7:batch", + name: "Anthropic: Claude Opus 4.7 (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + thinkingLevelMap: {"xhigh":"xhigh"}, + input: ["text", "image"], + cost: { + input: 2.5, + output: 12.5, + cacheRead: 0.25, + cacheWrite: 3.125, + }, + contextWindow: 1000000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, "anthropic/claude-opus-4.8": { id: "anthropic/claude-opus-4.8", name: "Anthropic: Claude Opus 4.8", @@ -10186,6 +10450,23 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"openai-completions">, + "anthropic/claude-opus-4.8:batch": { + id: "anthropic/claude-opus-4.8:batch", + name: "Anthropic: Claude Opus 4.8 (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 2.5, + output: 12.5, + cacheRead: 0.25, + cacheWrite: 3.125, + }, + contextWindow: 1000000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, "anthropic/claude-opus-5": { id: "anthropic/claude-opus-5", name: "Claude Opus 5", @@ -10220,16 +10501,33 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"openai-completions">, - "anthropic/claude-sonnet-4": { - id: "anthropic/claude-sonnet-4", - name: "Anthropic: Claude Sonnet 4", + "anthropic/claude-opus-5:batch": { + id: "anthropic/claude-opus-5:batch", + name: "Claude Opus 5 (batch)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", reasoning: true, input: ["text", "image"], cost: { - input: 3, + input: 2.5, + output: 12.5, + cacheRead: 0.25, + cacheWrite: 3.125, + }, + contextWindow: 1000000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "anthropic/claude-sonnet-4": { + id: "anthropic/claude-sonnet-4", + name: "Anthropic: Claude Sonnet 4", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75, @@ -10254,6 +10552,23 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 64000, } satisfies Model<"openai-completions">, + "anthropic/claude-sonnet-4.5:batch": { + id: "anthropic/claude-sonnet-4.5:batch", + name: "Anthropic: Claude Sonnet 4.5 (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.5, + output: 7.5, + cacheRead: 0.15, + cacheWrite: 1.875, + }, + contextWindow: 1000000, + maxTokens: 64000, + } satisfies Model<"openai-completions">, "anthropic/claude-sonnet-4.6": { id: "anthropic/claude-sonnet-4.6", name: "Anthropic: Claude Sonnet 4.6", @@ -10271,6 +10586,23 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"openai-completions">, + "anthropic/claude-sonnet-4.6:batch": { + id: "anthropic/claude-sonnet-4.6:batch", + name: "Anthropic: Claude Sonnet 4.6 (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.5, + output: 7.5, + cacheRead: 0.15, + cacheWrite: 1.875, + }, + contextWindow: 1000000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, "anthropic/claude-sonnet-5": { id: "anthropic/claude-sonnet-5", name: "Anthropic: Claude Sonnet 5", @@ -10288,6 +10620,23 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"openai-completions">, + "anthropic/claude-sonnet-5:batch": { + id: "anthropic/claude-sonnet-5:batch", + name: "Anthropic: Claude Sonnet 5 (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1, + output: 5, + cacheRead: 0.09999999999999999, + cacheWrite: 1.25, + }, + contextWindow: 1000000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, "arcee-ai/trinity-large-thinking": { id: "arcee-ai/trinity-large-thinking", name: "Arcee AI: Trinity Large Thinking", @@ -10467,8 +10816,8 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.20020000000000002, - output: 0.8000999999999999, + input: 0.2574, + output: 1.0287, cacheRead: 0, cacheWrite: 0, }, @@ -10596,7 +10945,7 @@ export const MODELS = { } satisfies Model<"openai-completions">, "deepseek/deepseek-v4-flash": { id: "deepseek/deepseek-v4-flash", - name: "DeepSeek: DeepSeek V4 Flash", + name: "DeepSeek: DeepSeek V4 Flash 0423", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", @@ -10605,13 +10954,32 @@ export const MODELS = { thinkingLevelMap: {"minimal":null,"low":null,"medium":null,"high":"high","xhigh":"max"}, input: ["text"], cost: { - input: 0.14, - output: 0.28, - cacheRead: 0.028, + input: 0.0882, + output: 0.1764, + cacheRead: 0.01764, cacheWrite: 0, }, contextWindow: 1048576, - maxTokens: 393216, + maxTokens: 131072, + } satisfies Model<"openai-completions">, + "deepseek/deepseek-v4-flash-0731": { + id: "deepseek/deepseek-v4-flash-0731", + name: "DeepSeek: DeepSeek V4 Flash 0731", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + compat: {"requiresReasoningContentOnAssistantMessages":true,"thinkingFormat":"deepseek"}, + reasoning: true, + thinkingLevelMap: {"minimal":null,"low":null,"medium":null,"high":"high","xhigh":"max"}, + input: ["text"], + cost: { + input: 0.09, + output: 0.18, + cacheRead: 0.018, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 65536, } satisfies Model<"openai-completions">, "deepseek/deepseek-v4-pro": { id: "deepseek/deepseek-v4-pro", @@ -10644,7 +11012,7 @@ export const MODELS = { input: 0.3, output: 2.5, cacheRead: 0.03, - cacheWrite: 0.08333333333333334, + cacheWrite: 0.0833333333333333, }, contextWindow: 1048576, maxTokens: 65535, @@ -10661,7 +11029,41 @@ export const MODELS = { input: 0.09999999999999999, output: 0.39999999999999997, cacheRead: 0.01, - cacheWrite: 0.08333333333333334, + cacheWrite: 0.0833333333333333, + }, + contextWindow: 1048576, + maxTokens: 65535, + } satisfies Model<"openai-completions">, + "google/gemini-2.5-flash-lite:batch": { + id: "google/gemini-2.5-flash-lite:batch", + name: "Google: Gemini 2.5 Flash Lite (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.049999999999999996, + output: 0.19999999999999998, + cacheRead: 0.01, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 65535, + } satisfies Model<"openai-completions">, + "google/gemini-2.5-flash:batch": { + id: "google/gemini-2.5-flash:batch", + name: "Google: Gemini 2.5 Flash (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.15, + output: 1.25, + cacheRead: 0.03, + cacheWrite: 0, }, contextWindow: 1048576, maxTokens: 65535, @@ -10717,6 +11119,23 @@ export const MODELS = { contextWindow: 1048576, maxTokens: 65535, } satisfies Model<"openai-completions">, + "google/gemini-2.5-pro:batch": { + id: "google/gemini-2.5-pro:batch", + name: "Google: Gemini 2.5 Pro (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.625, + output: 5, + cacheRead: 0.125, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 65536, + } satisfies Model<"openai-completions">, "google/gemini-3-flash-preview": { id: "google/gemini-3-flash-preview", name: "Google: Gemini 3 Flash Preview", @@ -10729,10 +11148,27 @@ export const MODELS = { input: 0.5, output: 3, cacheRead: 0.049999999999999996, - cacheWrite: 0.08333333333333334, + cacheWrite: 0.0833333333333333, }, contextWindow: 1048576, - maxTokens: 65535, + maxTokens: 65536, + } satisfies Model<"openai-completions">, + "google/gemini-3-flash-preview:batch": { + id: "google/gemini-3-flash-preview:batch", + name: "Google: Gemini 3 Flash Preview (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.25, + output: 1.5, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 65536, } satisfies Model<"openai-completions">, "google/gemini-3-pro-image": { id: "google/gemini-3-pro-image", @@ -10763,7 +11199,7 @@ export const MODELS = { input: 0.25, output: 1.5, cacheRead: 0.024999999999999998, - cacheWrite: 0.08333333333333334, + cacheWrite: 0.0833333333333333, }, contextWindow: 1048576, maxTokens: 65536, @@ -10780,7 +11216,24 @@ export const MODELS = { input: 0.25, output: 1.5, cacheRead: 0.024999999999999998, - cacheWrite: 0.08333333333333334, + cacheWrite: 0.0833333333333333, + }, + contextWindow: 1048576, + maxTokens: 65536, + } satisfies Model<"openai-completions">, + "google/gemini-3.1-flash-lite:batch": { + id: "google/gemini-3.1-flash-lite:batch", + name: "Google: Gemini 3.1 Flash Lite (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.125, + output: 0.75, + cacheRead: 0.012499999999999999, + cacheWrite: 0, }, contextWindow: 1048576, maxTokens: 65536, @@ -10819,6 +11272,23 @@ export const MODELS = { contextWindow: 1048576, maxTokens: 65536, } satisfies Model<"openai-completions">, + "google/gemini-3.1-pro-preview:batch": { + id: "google/gemini-3.1-pro-preview:batch", + name: "Google: Gemini 3.1 Pro Preview (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1, + output: 6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 65536, + } satisfies Model<"openai-completions">, "google/gemini-3.5-flash": { id: "google/gemini-3.5-flash", name: "Google: Gemini 3.5 Flash", @@ -10831,7 +11301,7 @@ export const MODELS = { input: 1.5, output: 9, cacheRead: 0.15, - cacheWrite: 0.08333333333333334, + cacheWrite: 0.0833333333333333, }, contextWindow: 1048576, maxTokens: 65536, @@ -10848,7 +11318,41 @@ export const MODELS = { input: 0.3, output: 2.5, cacheRead: 0.03, - cacheWrite: 0.08333333333333334, + cacheWrite: 0.0833333333333333, + }, + contextWindow: 1048576, + maxTokens: 65536, + } satisfies Model<"openai-completions">, + "google/gemini-3.5-flash-lite:batch": { + id: "google/gemini-3.5-flash-lite:batch", + name: "Google: Gemini 3.5 Flash Lite (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.15, + output: 1.25, + cacheRead: 0.015, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 65536, + } satisfies Model<"openai-completions">, + "google/gemini-3.5-flash:batch": { + id: "google/gemini-3.5-flash:batch", + name: "Google: Gemini 3.5 Flash (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.75, + output: 4.5, + cacheRead: 0.075, + cacheWrite: 0, }, contextWindow: 1048576, maxTokens: 65536, @@ -10865,7 +11369,24 @@ export const MODELS = { input: 1.5, output: 7.5, cacheRead: 0.15, - cacheWrite: 0.08333333333333334, + cacheWrite: 0.0833333333333333, + }, + contextWindow: 1048576, + maxTokens: 65536, + } satisfies Model<"openai-completions">, + "google/gemini-3.6-flash:batch": { + id: "google/gemini-3.6-flash:batch", + name: "Google: Gemini 3.6 Flash (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.75, + output: 3.75, + cacheRead: 0.075, + cacheWrite: 0.0833333333333333, }, contextWindow: 1048576, maxTokens: 65536, @@ -10913,13 +11434,13 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 0.14, - output: 0.42, - cacheRead: 0.049999999999999996, + input: 0.07, + output: 0.33999999999999997, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 262144, + maxTokens: 16384, } satisfies Model<"openai-completions">, "google/gemma-4-26b-a4b-it:free": { id: "google/gemma-4-26b-a4b-it:free", @@ -10947,9 +11468,9 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 0.14, - output: 0.39999999999999997, - cacheRead: 0, + input: 0.09999999999999999, + output: 0.33999999999999997, + cacheRead: 0.09999999999999999, cacheWrite: 0, }, contextWindow: 262144, @@ -11040,9 +11561,26 @@ export const MODELS = { contextWindow: 262144, maxTokens: 32768, } satisfies Model<"openai-completions">, - "inclusionai/ling-3.0-flash:free": { - id: "inclusionai/ling-3.0-flash:free", - name: "Ling-3.0-flash (free)", + "inclusionai/ling-3.0-flash": { + id: "inclusionai/ling-3.0-flash", + name: "Ling-3.0-flash", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.075, + output: 0.22, + cacheRead: 0.015, + cacheWrite: 0, + }, + contextWindow: 131072, + maxTokens: 32768, + } satisfies Model<"openai-completions">, + "inclusionai/ling-3.0-tiny:free": { + id: "inclusionai/ling-3.0-tiny:free", + name: "inclusionAI: Ling 3.0 Tiny (free)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", @@ -11185,13 +11723,13 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.13, - output: 0.39999999999999997, + input: 0.09999999999999999, + output: 0.32, cacheRead: 0, cacheWrite: 0, }, contextWindow: 131072, - maxTokens: 128000, + maxTokens: 16384, } satisfies Model<"openai-completions">, "meta-llama/llama-4-maverick": { id: "meta-llama/llama-4-maverick", @@ -11244,6 +11782,23 @@ export const MODELS = { contextWindow: 1048576, maxTokens: 4096, } satisfies Model<"openai-completions">, + "meta/muse-spark-1.2": { + id: "meta/muse-spark-1.2", + name: "Meta: Muse Spark 1.2", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 4.25, + cacheRead: 0.15, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 4096, + } satisfies Model<"openai-completions">, "minimax/minimax-m1": { id: "minimax/minimax-m1", name: "MiniMax: MiniMax M1", @@ -11304,7 +11859,7 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.15, + input: 0.22, output: 0.8999999999999999, cacheRead: 0.049999999999999996, cacheWrite: 0, @@ -11321,9 +11876,9 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.25, - output: 1, - cacheRead: 0.049999999999999996, + input: 0.27, + output: 1.08, + cacheRead: 0.054, cacheWrite: 0, }, contextWindow: 204800, @@ -11346,38 +11901,38 @@ export const MODELS = { contextWindow: 1048576, maxTokens: 512000, } satisfies Model<"openai-completions">, - "mistralai/codestral-2508": { - id: "mistralai/codestral-2508", - name: "Mistral: Codestral 2508", + "minimax/minimax-m3:batch": { + id: "minimax/minimax-m3:batch", + name: "MiniMax: MiniMax M3 (batch)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: false, - input: ["text"], + reasoning: true, + input: ["text", "image"], cost: { - input: 0.3, - output: 0.8999999999999999, + input: 0.15, + output: 0.6, cacheRead: 0.03, cacheWrite: 0, }, - contextWindow: 256000, + contextWindow: 524288, maxTokens: 4096, } satisfies Model<"openai-completions">, - "mistralai/devstral-2512": { - id: "mistralai/devstral-2512", - name: "Mistral: Devstral 2 2512", + "mistralai/codestral-2508": { + id: "mistralai/codestral-2508", + name: "Mistral: Codestral 2508", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", reasoning: false, input: ["text"], cost: { - input: 0.39999999999999997, - output: 2, - cacheRead: 0.04, + input: 0.3, + output: 0.8999999999999999, + cacheRead: 0.03, cacheWrite: 0, }, - contextWindow: 262144, + contextWindow: 256000, maxTokens: 4096, } satisfies Model<"openai-completions">, "mistralai/ministral-14b-2512": { @@ -11593,13 +12148,13 @@ export const MODELS = { reasoning: false, input: ["text", "image"], cost: { - input: 0.09999999999999999, - output: 0.3, - cacheRead: 0.01, + input: 0.09375, + output: 0.25, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 256000, - maxTokens: 4096, + maxTokens: 16384, } satisfies Model<"openai-completions">, "mistralai/mixtral-8x22b-instruct": { id: "mistralai/mixtral-8x22b-instruct", @@ -11712,9 +12267,9 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 0.646, - output: 2.7199999999999998, - cacheRead: 0.1088, + input: 0.5700000000000001, + output: 2.4, + cacheRead: 0.096, cacheWrite: 0, }, contextWindow: 262144, @@ -11729,7 +12284,7 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 0.73, + input: 0.7, output: 3.5, cacheRead: 0.15, cacheWrite: 0, @@ -11737,6 +12292,23 @@ export const MODELS = { contextWindow: 262144, maxTokens: 262144, } satisfies Model<"openai-completions">, + "moonshotai/kimi-k2.7-code:batch": { + id: "moonshotai/kimi-k2.7-code:batch", + name: "MoonshotAI: Kimi K2.7 Code (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.475, + output: 2, + cacheRead: 0.095, + cacheWrite: 0, + }, + contextWindow: 262144, + maxTokens: 4096, + } satisfies Model<"openai-completions">, "moonshotai/kimi-k3": { id: "moonshotai/kimi-k3", name: "MoonshotAI: Kimi K3", @@ -11799,11 +12371,11 @@ export const MODELS = { cost: { input: 0.049999999999999996, output: 0.19999999999999998, - cacheRead: 0, + cacheRead: 0.03, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 228000, + maxTokens: 262144, } satisfies Model<"openai-completions">, "nvidia/nemotron-3-nano-30b-a3b:free": { id: "nvidia/nemotron-3-nano-30b-a3b:free", @@ -11882,13 +12454,30 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.5, - output: 2.2, + input: 0.6, + output: 3.5999999999999996, + cacheRead: 0.19999999999999998, + cacheWrite: 0, + }, + contextWindow: 512288, + maxTokens: 4096, + } satisfies Model<"openai-completions">, + "nvidia/nemotron-3-ultra-550b-a55b:batch": { + id: "nvidia/nemotron-3-ultra-550b-a55b:batch", + name: "NVIDIA: Nemotron 3 Ultra (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.3, + output: 1.7999999999999998, cacheRead: 0.09999999999999999, cacheWrite: 0, }, contextWindow: 512288, - maxTokens: 16384, + maxTokens: 4096, } satisfies Model<"openai-completions">, "nvidia/nemotron-3-ultra-550b-a55b:free": { id: "nvidia/nemotron-3-ultra-550b-a55b:free", @@ -11992,6 +12581,23 @@ export const MODELS = { contextWindow: 16385, maxTokens: 4096, } satisfies Model<"openai-completions">, + "openai/gpt-3.5-turbo:batch": { + id: "openai/gpt-3.5-turbo:batch", + name: "OpenAI: GPT-3.5 Turbo (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.25, + output: 0.75, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 16385, + maxTokens: 4096, + } satisfies Model<"openai-completions">, "openai/gpt-4": { id: "openai/gpt-4", name: "OpenAI: GPT-4", @@ -12043,6 +12649,23 @@ export const MODELS = { contextWindow: 128000, maxTokens: 4096, } satisfies Model<"openai-completions">, + "openai/gpt-4-turbo:batch": { + id: "openai/gpt-4-turbo:batch", + name: "OpenAI: GPT-4 Turbo (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 5, + output: 15, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 4096, + } satisfies Model<"openai-completions">, "openai/gpt-4.1": { id: "openai/gpt-4.1", name: "OpenAI: GPT-4.1", @@ -12077,6 +12700,23 @@ export const MODELS = { contextWindow: 1047576, maxTokens: 32768, } satisfies Model<"openai-completions">, + "openai/gpt-4.1-mini:batch": { + id: "openai/gpt-4.1-mini:batch", + name: "OpenAI: GPT-4.1 Mini (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.19999999999999998, + output: 0.7999999999999999, + cacheRead: 0.049999999999999996, + cacheWrite: 0, + }, + contextWindow: 1047576, + maxTokens: 32768, + } satisfies Model<"openai-completions">, "openai/gpt-4.1-nano": { id: "openai/gpt-4.1-nano", name: "OpenAI: GPT-4.1 Nano", @@ -12094,6 +12734,40 @@ export const MODELS = { contextWindow: 1047576, maxTokens: 32768, } satisfies Model<"openai-completions">, + "openai/gpt-4.1-nano:batch": { + id: "openai/gpt-4.1-nano:batch", + name: "OpenAI: GPT-4.1 Nano (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.049999999999999996, + output: 0.19999999999999998, + cacheRead: 0.012499999999999999, + cacheWrite: 0, + }, + contextWindow: 1047576, + maxTokens: 32768, + } satisfies Model<"openai-completions">, + "openai/gpt-4.1:batch": { + id: "openai/gpt-4.1:batch", + name: "OpenAI: GPT-4.1 (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 1, + output: 4, + cacheRead: 0.25, + cacheWrite: 0, + }, + contextWindow: 1047576, + maxTokens: 32768, + } satisfies Model<"openai-completions">, "openai/gpt-4o": { id: "openai/gpt-4o", name: "OpenAI: GPT-4o", @@ -12196,6 +12870,40 @@ export const MODELS = { contextWindow: 128000, maxTokens: 16384, } satisfies Model<"openai-completions">, + "openai/gpt-4o-mini:batch": { + id: "openai/gpt-4o-mini:batch", + name: "OpenAI: GPT-4o-mini (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 0.075, + output: 0.3, + cacheRead: 0.0375, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model<"openai-completions">, + "openai/gpt-4o:batch": { + id: "openai/gpt-4o:batch", + name: "OpenAI: GPT-4o (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text", "image"], + cost: { + input: 1.25, + output: 5, + cacheRead: 0.625, + cacheWrite: 0, + }, + contextWindow: 128000, + maxTokens: 16384, + } satisfies Model<"openai-completions">, "openai/gpt-5": { id: "openai/gpt-5", name: "OpenAI: GPT-5", @@ -12213,18 +12921,18 @@ export const MODELS = { contextWindow: 400000, maxTokens: 128000, } satisfies Model<"openai-completions">, - "openai/gpt-5-codex": { - id: "openai/gpt-5-codex", - name: "OpenAI: GPT-5 Codex", + "openai/gpt-5-codex:batch": { + id: "openai/gpt-5-codex:batch", + name: "OpenAI: GPT-5 Codex (batch)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", reasoning: true, input: ["text", "image"], cost: { - input: 1.25, - output: 10, - cacheRead: 0.125, + input: 0.625, + output: 5, + cacheRead: 0.0625, cacheWrite: 0, }, contextWindow: 400000, @@ -12247,6 +12955,23 @@ export const MODELS = { contextWindow: 400000, maxTokens: 128000, } satisfies Model<"openai-completions">, + "openai/gpt-5-mini:batch": { + id: "openai/gpt-5-mini:batch", + name: "OpenAI: GPT-5 Mini (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.125, + output: 1, + cacheRead: 0.012499999999999999, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, "openai/gpt-5-nano": { id: "openai/gpt-5-nano", name: "OpenAI: GPT-5 Nano", @@ -12264,6 +12989,23 @@ export const MODELS = { contextWindow: 400000, maxTokens: 128000, } satisfies Model<"openai-completions">, + "openai/gpt-5-nano:batch": { + id: "openai/gpt-5-nano:batch", + name: "OpenAI: GPT-5 Nano (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.024999999999999998, + output: 0.19999999999999998, + cacheRead: 0.0025, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, "openai/gpt-5-pro": { id: "openai/gpt-5-pro", name: "OpenAI: GPT-5 Pro", @@ -12281,39 +13023,39 @@ export const MODELS = { contextWindow: 400000, maxTokens: 128000, } satisfies Model<"openai-completions">, - "openai/gpt-5.1": { - id: "openai/gpt-5.1", - name: "OpenAI: GPT-5.1", + "openai/gpt-5-pro:batch": { + id: "openai/gpt-5-pro:batch", + name: "OpenAI: GPT-5 Pro (batch)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", reasoning: true, input: ["text", "image"], cost: { - input: 1.25, - output: 10, - cacheRead: 0.125, + input: 7.5, + output: 60, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 400000, maxTokens: 128000, } satisfies Model<"openai-completions">, - "openai/gpt-5.1-chat": { - id: "openai/gpt-5.1-chat", - name: "OpenAI: GPT-5.1 Chat", + "openai/gpt-5.1": { + id: "openai/gpt-5.1", + name: "OpenAI: GPT-5.1", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", - reasoning: false, + reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, - cacheRead: 0.13, + cacheRead: 0.125, cacheWrite: 0, }, - contextWindow: 128000, - maxTokens: 32000, + contextWindow: 400000, + maxTokens: 128000, } satisfies Model<"openai-completions">, "openai/gpt-5.1-codex": { id: "openai/gpt-5.1-codex", @@ -12366,6 +13108,23 @@ export const MODELS = { contextWindow: 400000, maxTokens: 128000, } satisfies Model<"openai-completions">, + "openai/gpt-5.1:batch": { + id: "openai/gpt-5.1:batch", + name: "OpenAI: GPT-5.1 (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.625, + output: 5, + cacheRead: 0.0625, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, "openai/gpt-5.2": { id: "openai/gpt-5.2", name: "OpenAI: GPT-5.2", @@ -12438,6 +13197,42 @@ export const MODELS = { contextWindow: 400000, maxTokens: 128000, } satisfies Model<"openai-completions">, + "openai/gpt-5.2-pro:batch": { + id: "openai/gpt-5.2-pro:batch", + name: "OpenAI: GPT-5.2 Pro (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + thinkingLevelMap: {"xhigh":"xhigh"}, + input: ["text", "image"], + cost: { + input: 10.5, + output: 84, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-5.2:batch": { + id: "openai/gpt-5.2:batch", + name: "OpenAI: GPT-5.2 (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + thinkingLevelMap: {"xhigh":"xhigh"}, + input: ["text", "image"], + cost: { + input: 0.875, + output: 7, + cacheRead: 0.0875, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, "openai/gpt-5.3-chat": { id: "openai/gpt-5.3-chat", name: "OpenAI: GPT-5.3 Chat", @@ -12510,9 +13305,9 @@ export const MODELS = { contextWindow: 400000, maxTokens: 128000, } satisfies Model<"openai-completions">, - "openai/gpt-5.4-nano": { - id: "openai/gpt-5.4-nano", - name: "OpenAI: GPT-5.4 Nano", + "openai/gpt-5.4-mini:batch": { + id: "openai/gpt-5.4-mini:batch", + name: "OpenAI: GPT-5.4 Mini (batch)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", @@ -12520,9 +13315,45 @@ export const MODELS = { thinkingLevelMap: {"xhigh":"xhigh"}, input: ["text", "image"], cost: { - input: 0.19999999999999998, - output: 1.25, - cacheRead: 0.02, + input: 0.375, + output: 2.25, + cacheRead: 0.0375, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-5.4-nano": { + id: "openai/gpt-5.4-nano", + name: "OpenAI: GPT-5.4 Nano", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + thinkingLevelMap: {"xhigh":"xhigh"}, + input: ["text", "image"], + cost: { + input: 0.19999999999999998, + output: 1.25, + cacheRead: 0.02, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-5.4-nano:batch": { + id: "openai/gpt-5.4-nano:batch", + name: "OpenAI: GPT-5.4 Nano (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + thinkingLevelMap: {"xhigh":"xhigh"}, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.625, + cacheRead: 0.01, cacheWrite: 0, }, contextWindow: 400000, @@ -12546,6 +13377,42 @@ export const MODELS = { contextWindow: 1050000, maxTokens: 128000, } satisfies Model<"openai-completions">, + "openai/gpt-5.4-pro:batch": { + id: "openai/gpt-5.4-pro:batch", + name: "OpenAI: GPT-5.4 Pro (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + thinkingLevelMap: {"xhigh":"xhigh"}, + input: ["text", "image"], + cost: { + input: 15, + output: 90, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1050000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-5.4:batch": { + id: "openai/gpt-5.4:batch", + name: "OpenAI: GPT-5.4 (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + thinkingLevelMap: {"xhigh":"xhigh"}, + input: ["text", "image"], + cost: { + input: 1.25, + output: 7.5, + cacheRead: 0.125, + cacheWrite: 0, + }, + contextWindow: 1050000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, "openai/gpt-5.5": { id: "openai/gpt-5.5", name: "OpenAI: GPT-5.5", @@ -12582,6 +13449,42 @@ export const MODELS = { contextWindow: 1050000, maxTokens: 128000, } satisfies Model<"openai-completions">, + "openai/gpt-5.5-pro:batch": { + id: "openai/gpt-5.5-pro:batch", + name: "OpenAI: GPT-5.5 Pro (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + thinkingLevelMap: {"xhigh":"xhigh"}, + input: ["text", "image"], + cost: { + input: 15, + output: 90, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 1050000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-5.5:batch": { + id: "openai/gpt-5.5:batch", + name: "OpenAI: GPT-5.5 (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + thinkingLevelMap: {"xhigh":"xhigh"}, + input: ["text", "image"], + cost: { + input: 2.5, + output: 15, + cacheRead: 0.25, + cacheWrite: 0, + }, + contextWindow: 1050000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, "openai/gpt-5.6-luna": { id: "openai/gpt-5.6-luna", name: "OpenAI: GPT-5.6 Luna", @@ -12591,10 +13494,10 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 0.5, - output: 3, - cacheRead: 0.049999999999999996, - cacheWrite: 0.625, + input: 0.09999999999999999, + output: 0.6, + cacheRead: 0.01, + cacheWrite: 0.125, }, contextWindow: 1050000, maxTokens: 128000, @@ -12608,10 +13511,44 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 0.5, - output: 3, - cacheRead: 0.049999999999999996, - cacheWrite: 0.625, + input: 0.09999999999999999, + output: 0.6, + cacheRead: 0.01, + cacheWrite: 0.125, + }, + contextWindow: 1050000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-5.6-luna-pro:batch": { + id: "openai/gpt-5.6-luna-pro:batch", + name: "OpenAI: GPT-5.6 Luna Pro (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.6, + cacheRead: 0.01, + cacheWrite: 0, + }, + contextWindow: 1050000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-5.6-luna:batch": { + id: "openai/gpt-5.6-luna:batch", + name: "OpenAI: GPT-5.6 Luna (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.6, + cacheRead: 0.01, + cacheWrite: 0, }, contextWindow: 1050000, maxTokens: 128000, @@ -12650,6 +13587,40 @@ export const MODELS = { contextWindow: 1050000, maxTokens: 128000, } satisfies Model<"openai-completions">, + "openai/gpt-5.6-sol-pro:batch": { + id: "openai/gpt-5.6-sol-pro:batch", + name: "OpenAI: GPT-5.6 Sol Pro (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 2.5, + output: 15, + cacheRead: 0.25, + cacheWrite: 0, + }, + contextWindow: 1050000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-5.6-sol:batch": { + id: "openai/gpt-5.6-sol:batch", + name: "OpenAI: GPT-5.6 Sol (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 2.5, + output: 15, + cacheRead: 0.25, + cacheWrite: 0, + }, + contextWindow: 1050000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, "openai/gpt-5.6-terra": { id: "openai/gpt-5.6-terra", name: "OpenAI: GPT-5.6 Terra", @@ -12659,10 +13630,10 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 1.25, - output: 7.5, - cacheRead: 0.125, - cacheWrite: 1.5625, + input: 1, + output: 6, + cacheRead: 0.09999999999999999, + cacheWrite: 1.25, }, contextWindow: 1050000, maxTokens: 128000, @@ -12676,14 +13647,65 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 1.25, - output: 7.5, - cacheRead: 0.125, - cacheWrite: 1.5625, + input: 1, + output: 6, + cacheRead: 0.09999999999999999, + cacheWrite: 1.25, + }, + contextWindow: 1050000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-5.6-terra-pro:batch": { + id: "openai/gpt-5.6-terra-pro:batch", + name: "OpenAI: GPT-5.6 Terra Pro (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1, + output: 6, + cacheRead: 0.09999999999999999, + cacheWrite: 0, }, contextWindow: 1050000, maxTokens: 128000, } satisfies Model<"openai-completions">, + "openai/gpt-5.6-terra:batch": { + id: "openai/gpt-5.6-terra:batch", + name: "OpenAI: GPT-5.6 Terra (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1, + output: 6, + cacheRead: 0.09999999999999999, + cacheWrite: 0, + }, + contextWindow: 1050000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, + "openai/gpt-5:batch": { + id: "openai/gpt-5:batch", + name: "OpenAI: GPT-5 (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.625, + output: 5, + cacheRead: 0.0625, + cacheWrite: 0, + }, + contextWindow: 400000, + maxTokens: 128000, + } satisfies Model<"openai-completions">, "openai/gpt-audio": { id: "openai/gpt-audio", name: "OpenAI: GPT Audio", @@ -12762,8 +13784,8 @@ export const MODELS = { input: ["text"], cost: { input: 0.03, - output: 0.14, - cacheRead: 0, + output: 0.13, + cacheRead: 0.03, cacheWrite: 0, }, contextWindow: 131072, @@ -12820,6 +13842,23 @@ export const MODELS = { contextWindow: 200000, maxTokens: 100000, } satisfies Model<"openai-completions">, + "openai/o1:batch": { + id: "openai/o1:batch", + name: "OpenAI: o1 (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 7.5, + output: 30, + cacheRead: 3.75, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model<"openai-completions">, "openai/o3": { id: "openai/o3", name: "OpenAI: o3", @@ -12837,77 +13876,145 @@ export const MODELS = { contextWindow: 200000, maxTokens: 100000, } satisfies Model<"openai-completions">, - "openai/o3-deep-research": { - id: "openai/o3-deep-research", - name: "OpenAI: o3 Deep Research", + "openai/o3-mini": { + id: "openai/o3-mini", + name: "OpenAI: o3 Mini", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text"], + cost: { + input: 1.1, + output: 4.4, + cacheRead: 0.55, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model<"openai-completions">, + "openai/o3-mini-high": { + id: "openai/o3-mini-high", + name: "OpenAI: o3 Mini High", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text"], + cost: { + input: 1.1, + output: 4.4, + cacheRead: 0.55, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model<"openai-completions">, + "openai/o3-mini-high:batch": { + id: "openai/o3-mini-high:batch", + name: "OpenAI: o3 Mini High (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.55, + output: 2.2, + cacheRead: 0.275, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model<"openai-completions">, + "openai/o3-mini:batch": { + id: "openai/o3-mini:batch", + name: "OpenAI: o3 Mini (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.55, + output: 2.2, + cacheRead: 0.275, + cacheWrite: 0, + }, + contextWindow: 200000, + maxTokens: 100000, + } satisfies Model<"openai-completions">, + "openai/o3-pro": { + id: "openai/o3-pro", + name: "OpenAI: o3 Pro", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", reasoning: true, input: ["text", "image"], cost: { - input: 10, - output: 40, - cacheRead: 2.5, + input: 20, + output: 80, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 200000, maxTokens: 100000, } satisfies Model<"openai-completions">, - "openai/o3-mini": { - id: "openai/o3-mini", - name: "OpenAI: o3 Mini", + "openai/o3-pro:batch": { + id: "openai/o3-pro:batch", + name: "OpenAI: o3 Pro (batch)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", reasoning: true, - input: ["text"], + input: ["text", "image"], cost: { - input: 1.1, - output: 4.4, - cacheRead: 0.55, + input: 10, + output: 40, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 200000, maxTokens: 100000, } satisfies Model<"openai-completions">, - "openai/o3-mini-high": { - id: "openai/o3-mini-high", - name: "OpenAI: o3 Mini High", + "openai/o3:batch": { + id: "openai/o3:batch", + name: "OpenAI: o3 (batch)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", reasoning: true, - input: ["text"], + input: ["text", "image"], cost: { - input: 1.1, - output: 4.4, - cacheRead: 0.55, + input: 1, + output: 4, + cacheRead: 0.25, cacheWrite: 0, }, contextWindow: 200000, maxTokens: 100000, } satisfies Model<"openai-completions">, - "openai/o3-pro": { - id: "openai/o3-pro", - name: "OpenAI: o3 Pro", + "openai/o4-mini": { + id: "openai/o4-mini", + name: "OpenAI: o4 Mini", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", reasoning: true, input: ["text", "image"], cost: { - input: 20, - output: 80, - cacheRead: 0, + input: 1.1, + output: 4.4, + cacheRead: 0.275, cacheWrite: 0, }, contextWindow: 200000, maxTokens: 100000, } satisfies Model<"openai-completions">, - "openai/o4-mini": { - id: "openai/o4-mini", - name: "OpenAI: o4 Mini", + "openai/o4-mini-high": { + id: "openai/o4-mini-high", + name: "OpenAI: o4 Mini High", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", @@ -12922,35 +14029,35 @@ export const MODELS = { contextWindow: 200000, maxTokens: 100000, } satisfies Model<"openai-completions">, - "openai/o4-mini-deep-research": { - id: "openai/o4-mini-deep-research", - name: "OpenAI: o4 Mini Deep Research", + "openai/o4-mini-high:batch": { + id: "openai/o4-mini-high:batch", + name: "OpenAI: o4 Mini High (batch)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", reasoning: true, input: ["text", "image"], cost: { - input: 2, - output: 8, - cacheRead: 0.5, + input: 0.55, + output: 2.2, + cacheRead: 0.1375, cacheWrite: 0, }, contextWindow: 200000, maxTokens: 100000, } satisfies Model<"openai-completions">, - "openai/o4-mini-high": { - id: "openai/o4-mini-high", - name: "OpenAI: o4 Mini High", + "openai/o4-mini:batch": { + id: "openai/o4-mini:batch", + name: "OpenAI: o4 Mini (batch)", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", reasoning: true, input: ["text", "image"], cost: { - input: 1.1, - output: 4.4, - cacheRead: 0.275, + input: 0.55, + output: 2.2, + cacheRead: 0.1375, cacheWrite: 0, }, contextWindow: 200000, @@ -13007,40 +14114,6 @@ export const MODELS = { contextWindow: 200000, maxTokens: 4096, } satisfies Model<"openai-completions">, - "poolside/laguna-m.1": { - id: "poolside/laguna-m.1", - name: "Poolside: Laguna M.1", - api: "openai-completions", - provider: "openrouter", - baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, - input: ["text"], - cost: { - input: 0.19999999999999998, - output: 0.39999999999999997, - cacheRead: 0.09999999999999999, - cacheWrite: 0, - }, - contextWindow: 262144, - maxTokens: 32768, - } satisfies Model<"openai-completions">, - "poolside/laguna-m.1:free": { - id: "poolside/laguna-m.1:free", - name: "Poolside: Laguna M.1 (free)", - api: "openai-completions", - provider: "openrouter", - baseUrl: "https://openrouter.ai/api/v1", - reasoning: true, - input: ["text"], - cost: { - input: 0, - output: 0, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 262144, - maxTokens: 32768, - } satisfies Model<"openai-completions">, "poolside/laguna-s-2.1": { id: "poolside/laguna-s-2.1", name: "Poolside: Laguna S 2.1", @@ -13050,9 +14123,9 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.09999999999999999, - output: 0.19999999999999998, - cacheRead: 0.01, + input: 0.09, + output: 0.18, + cacheRead: 0.009, cacheWrite: 0, }, contextWindow: 1048576, @@ -13135,8 +14208,8 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.04, - output: 0.09999999999999999, + input: 0.09999999999999999, + output: 0.19999999999999998, cacheRead: 0, cacheWrite: 0, }, @@ -13186,10 +14259,10 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.26, - output: 0.78, + input: 0.39999999999999997, + output: 1.2, cacheRead: 0, - cacheWrite: 0.325, + cacheWrite: 0.5, }, contextWindow: 1000000, maxTokens: 32768, @@ -13254,13 +14327,13 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.3, - output: 3, + input: 0.22999999999999998, + output: 2.3, cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 32768, + maxTokens: 4096, } satisfies Model<"openai-completions">, "qwen/qwen3-30b-a3b": { id: "qwen/qwen3-30b-a3b", @@ -13305,8 +14378,8 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.13, - output: 1.56, + input: 0.19999999999999998, + output: 2.4, cacheRead: 0, cacheWrite: 0, }, @@ -13407,7 +14480,7 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.11, + input: 0.12, output: 0.7999999999999999, cacheRead: 0.07, cacheWrite: 0, @@ -13447,7 +14520,7 @@ export const MODELS = { cacheWrite: 0.975, }, contextWindow: 262144, - maxTokens: 32768, + maxTokens: 65536, } satisfies Model<"openai-completions">, "qwen/qwen3-max-thinking": { id: "qwen/qwen3-max-thinking", @@ -13464,7 +14537,7 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 32768, + maxTokens: 65536, } satisfies Model<"openai-completions">, "qwen/qwen3-next-80b-a3b-instruct": { id: "qwen/qwen3-next-80b-a3b-instruct", @@ -13475,13 +14548,13 @@ export const MODELS = { reasoning: false, input: ["text"], cost: { - input: 0.09999999999999999, + input: 0.09, output: 1.1, - cacheRead: 0.07, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 262144, + maxTokens: 16384, } satisfies Model<"openai-completions">, "qwen/qwen3-next-80b-a3b-thinking": { id: "qwen/qwen3-next-80b-a3b-thinking", @@ -13492,13 +14565,13 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.0975, - output: 0.78, + input: 0.15, + output: 1.2, cacheRead: 0, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 32768, + maxTokens: 4096, } satisfies Model<"openai-completions">, "qwen/qwen3-vl-235b-a22b-instruct": { id: "qwen/qwen3-vl-235b-a22b-instruct", @@ -13526,8 +14599,8 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 0.26, - output: 2.6, + input: 0.98, + output: 3.95, cacheRead: 0, cacheWrite: 0, }, @@ -13560,8 +14633,8 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 0.13, - output: 1.56, + input: 0.19999999999999998, + output: 2.4, cacheRead: 0, cacheWrite: 0, }, @@ -13611,8 +14684,8 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 0.117, - output: 1.365, + input: 0.18, + output: 2.0999999999999996, cacheRead: 0, cacheWrite: 0, }, @@ -13764,13 +14837,13 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 0.3, - output: 2, - cacheRead: 0.15, + input: 0.6, + output: 3.5999999999999996, + cacheRead: 0.12, cacheWrite: 0, }, contextWindow: 262144, - maxTokens: 65536, + maxTokens: 262144, } satisfies Model<"openai-completions">, "qwen/qwen3.6-35b-a3b": { id: "qwen/qwen3.6-35b-a3b", @@ -13783,7 +14856,7 @@ export const MODELS = { cost: { input: 0.14, output: 1, - cacheRead: 0, + cacheRead: 0.049999999999999996, cacheWrite: 0, }, contextWindow: 262144, @@ -13815,10 +14888,10 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 1.04, - output: 6.24, + input: 1.0270000000000001, + output: 6.162, cacheRead: 0, - cacheWrite: 1.3, + cacheWrite: 1.28375, }, contextWindow: 262144, maxTokens: 65536, @@ -13840,6 +14913,23 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 65536, } satisfies Model<"openai-completions">, + "qwen/qwen3.7-flash": { + id: "qwen/qwen3.7-flash", + name: "Qwen: Qwen3.7 Flash", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.03, + output: 0.13, + cacheRead: 0.006, + cacheWrite: 0.038000000000000006, + }, + contextWindow: 1000000, + maxTokens: 65536, + } satisfies Model<"openai-completions">, "qwen/qwen3.7-max": { id: "qwen/qwen3.7-max", name: "Qwen: Qwen3.7 Max", @@ -13855,7 +14945,7 @@ export const MODELS = { cacheWrite: 1.84375, }, contextWindow: 1000000, - maxTokens: 65536, + maxTokens: 131072, } satisfies Model<"openai-completions">, "qwen/qwen3.7-plus": { id: "qwen/qwen3.7-plus", @@ -13872,7 +14962,24 @@ export const MODELS = { cacheWrite: 0.39999999999999997, }, contextWindow: 1000000, - maxTokens: 65536, + maxTokens: 131072, + } satisfies Model<"openai-completions">, + "qwen/qwen3.8-max": { + id: "qwen/qwen3.8-max", + name: "Qwen: Qwen3.8 Max", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 2, + output: 6, + cacheRead: 0.25, + cacheWrite: 2.5, + }, + contextWindow: 1000000, + maxTokens: 131072, } satisfies Model<"openai-completions">, "rekaai/reka-edge": { id: "rekaai/reka-edge", @@ -14024,8 +15131,8 @@ export const MODELS = { cacheRead: 0, cacheWrite: 0, }, - contextWindow: 32768, - maxTokens: 32768, + contextWindow: 1024000, + maxTokens: 1024000, } satisfies Model<"openai-completions">, "thinkingmachines/inkling": { id: "thinkingmachines/inkling", @@ -14044,6 +15151,40 @@ export const MODELS = { contextWindow: 1048576, maxTokens: 4096, } satisfies Model<"openai-completions">, + "thinkingmachines/inkling-small": { + id: "thinkingmachines/inkling-small", + name: "Thinking Machines: Inkling Small", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.5, + output: 1.2, + cacheRead: 0.09999999999999999, + cacheWrite: 0, + }, + contextWindow: 524288, + maxTokens: 4096, + } satisfies Model<"openai-completions">, + "thinkingmachines/inkling:batch": { + id: "thinkingmachines/inkling:batch", + name: "Thinking Machines: Inkling (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.5, + output: 2.025, + cacheRead: 0.08499999999999999, + cacheWrite: 0, + }, + contextWindow: 524288, + maxTokens: 4096, + } satisfies Model<"openai-completions">, "upstage/solar-pro-3": { id: "upstage/solar-pro-3", name: "Upstage: Solar Pro 3", @@ -14058,12 +15199,12 @@ export const MODELS = { cacheRead: 0.015, cacheWrite: 0, }, - contextWindow: 128000, - maxTokens: 4096, + contextWindow: 131072, + maxTokens: 131072, } satisfies Model<"openai-completions">, "x-ai/grok-4.20": { id: "x-ai/grok-4.20", - name: "xAI: Grok 4.20", + name: "SpaceXAI: Grok 4.20", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", @@ -14080,7 +15221,7 @@ export const MODELS = { } satisfies Model<"openai-completions">, "x-ai/grok-4.3": { id: "x-ai/grok-4.3", - name: "xAI: Grok 4.3", + name: "SpaceXAI: Grok 4.3", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", @@ -14097,7 +15238,7 @@ export const MODELS = { } satisfies Model<"openai-completions">, "x-ai/grok-4.5": { id: "x-ai/grok-4.5", - name: "xAI: Grok 4.5", + name: "SpaceXAI: Grok 4.5", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", @@ -14114,7 +15255,7 @@ export const MODELS = { } satisfies Model<"openai-completions">, "x-ai/grok-build-0.1": { id: "x-ai/grok-build-0.1", - name: "xAI: Grok Build 0.1", + name: "SpaceXAI: Grok Build 0.1", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", @@ -14325,13 +15466,13 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.966, - output: 3.036, - cacheRead: 0.1794, + input: 0.952, + output: 2.992, + cacheRead: 0.17679999999999998, cacheWrite: 0, }, contextWindow: 204800, - maxTokens: 128000, + maxTokens: 131072, } satisfies Model<"openai-completions">, "z-ai/glm-5.2": { id: "z-ai/glm-5.2", @@ -14342,14 +15483,31 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.742, - output: 2.332, - cacheRead: 0.1378, + input: 0.546, + output: 1.716, + cacheRead: 0.10139999999999999, cacheWrite: 0, }, contextWindow: 1048576, maxTokens: 131072, } satisfies Model<"openai-completions">, + "z-ai/glm-5.2:batch": { + id: "z-ai/glm-5.2:batch", + name: "Z.ai: GLM 5.2 (batch)", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: true, + input: ["text"], + cost: { + input: 0.7, + output: 2.2, + cacheRead: 0.13, + cacheWrite: 0, + }, + contextWindow: 512000, + maxTokens: 4096, + } satisfies Model<"openai-completions">, "z-ai/glm-5v-turbo": { id: "z-ai/glm-5v-turbo", name: "Z.ai: GLM 5V Turbo", @@ -14435,6 +15593,25 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"openai-completions">, + "~deepseek/deepseek-v4-flash-latest": { + id: "~deepseek/deepseek-v4-flash-latest", + name: "DeepSeek V4 Flash Latest", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + compat: {"requiresReasoningContentOnAssistantMessages":true,"thinkingFormat":"deepseek"}, + reasoning: true, + thinkingLevelMap: {"minimal":null,"low":null,"medium":null,"high":"high","xhigh":"max"}, + input: ["text"], + cost: { + input: 0.09, + output: 0.18, + cacheRead: 0.018, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 65536, + } satisfies Model<"openai-completions">, "~google/gemini-flash-latest": { id: "~google/gemini-flash-latest", name: "Google Gemini Flash Latest", @@ -14447,7 +15624,7 @@ export const MODELS = { input: 1.5, output: 7.5, cacheRead: 0.15, - cacheWrite: 0.08333333333333334, + cacheWrite: 0.0833333333333333, }, contextWindow: 1048576, maxTokens: 65536, @@ -14478,9 +15655,9 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 3, - output: 15, - cacheRead: 0.3, + input: 2.9000000000000004, + output: 14, + cacheRead: 0.29, cacheWrite: 0, }, contextWindow: 1048576, @@ -14645,11 +15822,30 @@ export const MODELS = { cost: { input: 1.25, output: 3.75, - cacheRead: 0, + cacheRead: 0.125, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 500000, + } satisfies Model<"openai-completions">, + "deepseek-ai/DeepSeek-V4-Flash-0731": { + id: "deepseek-ai/DeepSeek-V4-Flash-0731", + name: "DeepSeek V4 Flash 0731", + api: "openai-completions", + provider: "together", + baseUrl: "https://api.together.ai/v1", + compat: {"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","supportsStrictMode":false,"supportsLongCacheRetention":false,"thinkingFormat":"together"}, + reasoning: true, + thinkingLevelMap: {"minimal":null,"low":null,"medium":null}, + input: ["text"], + cost: { + input: 0.14, + output: 0.28, + cacheRead: 0.03, cacheWrite: 0, }, contextWindow: 1000000, - maxTokens: 500000, + maxTokens: 384000, } satisfies Model<"openai-completions">, "deepseek-ai/DeepSeek-V4-Pro": { id: "deepseek-ai/DeepSeek-V4-Pro", @@ -15235,6 +16431,23 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 64000, } satisfies Model<"anthropic-messages">, + "alibaba/qwen3.7-flash": { + id: "alibaba/qwen3.7-flash", + name: "Qwen 3.7 Flash", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.03, + output: 0.13, + cacheRead: 0.006, + cacheWrite: 0.038000000000000006, + }, + contextWindow: 991000, + maxTokens: 64000, + } satisfies Model<"anthropic-messages">, "alibaba/qwen3.7-max": { id: "alibaba/qwen3.7-max", name: "Qwen 3.7 Max", @@ -15269,6 +16482,23 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 64000, } satisfies Model<"anthropic-messages">, + "alibaba/qwen3.8-max": { + id: "alibaba/qwen3.8-max", + name: "Qwen 3.8 Max", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 2, + output: 6, + cacheRead: 0.25, + cacheWrite: 2.5, + }, + contextWindow: 1000000, + maxTokens: 128000, + } satisfies Model<"anthropic-messages">, "amazon/nova-2-lite": { id: "amazon/nova-2-lite", name: "Nova 2 Lite", @@ -15405,23 +16635,6 @@ export const MODELS = { contextWindow: 200000, maxTokens: 8192, } satisfies Model<"anthropic-messages">, - "anthropic/claude-opus-4.1": { - id: "anthropic/claude-opus-4.1", - name: "Claude Opus 4.1", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 15, - output: 75, - cacheRead: 1.5, - cacheWrite: 18.75, - }, - contextWindow: 200000, - maxTokens: 32000, - } satisfies Model<"anthropic-messages">, "anthropic/claude-opus-4.5": { id: "anthropic/claude-opus-4.5", name: "Claude Opus 4.5", @@ -15526,23 +16739,6 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"anthropic-messages">, - "anthropic/claude-opus-5-fast": { - id: "anthropic/claude-opus-5-fast", - name: "Claude Opus 5 (Fast)", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 10, - output: 50, - cacheRead: 1, - cacheWrite: 12.5, - }, - contextWindow: 1000000, - maxTokens: 128000, - } satisfies Model<"anthropic-messages">, "anthropic/claude-sonnet-4": { id: "anthropic/claude-sonnet-4", name: "Claude Sonnet 4", @@ -15787,7 +16983,7 @@ export const MODELS = { api: "anthropic-messages", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, + reasoning: false, input: ["text"], cost: { input: 0.62, @@ -15807,8 +17003,25 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.14, - output: 0.28, + input: 0.19999999999999998, + output: 0.39999999999999997, + cacheRead: 0.04, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 384000, + } satisfies Model<"anthropic-messages">, + "deepseek/deepseek-v4-flash-0731": { + id: "deepseek/deepseek-v4-flash-0731", + name: "DeepSeek V4 Flash 0731", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], + cost: { + input: 0.13, + output: 0.26, cacheRead: 0.028, cacheWrite: 0, }, @@ -15824,13 +17037,13 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.435, - output: 0.87, - cacheRead: 0.0036, + input: 1.74, + output: 3.48, + cacheRead: 0.14, cacheWrite: 0, }, - contextWindow: 1000000, - maxTokens: 384000, + contextWindow: 1048600, + maxTokens: 1048600, } satisfies Model<"anthropic-messages">, "google/gemini-2.5-flash": { id: "google/gemini-2.5-flash", @@ -15900,23 +17113,6 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 65000, } satisfies Model<"anthropic-messages">, - "google/gemini-3-pro-preview": { - id: "google/gemini-3-pro-preview", - name: "Gemini 3 Pro Preview", - api: "anthropic-messages", - provider: "vercel-ai-gateway", - baseUrl: "https://ai-gateway.vercel.sh", - reasoning: true, - input: ["text", "image"], - cost: { - input: 2, - output: 12, - cacheRead: 0.19999999999999998, - cacheWrite: 0, - }, - contextWindow: 1000000, - maxTokens: 64000, - } satisfies Model<"anthropic-messages">, "google/gemini-3.1-flash-lite": { id: "google/gemini-3.1-flash-lite", name: "Gemini 3.1 Flash Lite", @@ -16033,7 +17229,7 @@ export const MODELS = { cacheRead: 0, cacheWrite: 0, }, - contextWindow: 262144, + contextWindow: 256000, maxTokens: 131072, } satisfies Model<"anthropic-messages">, "inception/mercury-2": { @@ -16070,14 +17266,31 @@ export const MODELS = { contextWindow: 32000, maxTokens: 16384, } satisfies Model<"anthropic-messages">, - "inclusionai/ling-3.0-flash-free": { - id: "inclusionai/ling-3.0-flash-free", + "inclusionai/ling-3.0-flash": { + id: "inclusionai/ling-3.0-flash", name: "Ling 3.0 Flash", api: "anthropic-messages", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, input: ["text"], + cost: { + input: 0.06, + output: 0.18, + cacheRead: 0.012, + cacheWrite: 0, + }, + contextWindow: 256000, + maxTokens: 32000, + } satisfies Model<"anthropic-messages">, + "inclusionai/ling-3.0-tiny-free": { + id: "inclusionai/ling-3.0-tiny-free", + name: "Ling 3.0 Tiny (Free)", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text"], cost: { input: 0, output: 0, @@ -16085,7 +17298,7 @@ export const MODELS = { cacheWrite: 0, }, contextWindow: 256000, - maxTokens: 256000, + maxTokens: 32000, } satisfies Model<"anthropic-messages">, "interfaze/interfaze-beta": { id: "interfaze/interfaze-beta", @@ -16111,7 +17324,7 @@ export const MODELS = { provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, - input: ["text"], + input: ["text", "image"], cost: { input: 0.15, output: 0.6, @@ -16162,7 +17375,7 @@ export const MODELS = { provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, - input: ["text"], + input: ["text", "image"], cost: { input: 0.74, output: 2.96, @@ -16274,6 +17487,40 @@ export const MODELS = { contextWindow: 1048576, maxTokens: 1048576, } satisfies Model<"anthropic-messages">, + "meta/muse-spark-1.2": { + id: "meta/muse-spark-1.2", + name: "Muse Spark 1.2", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 1.25, + output: 4.25, + cacheRead: 0.15, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 1048576, + } satisfies Model<"anthropic-messages">, + "meta/muse-spark-1.2-contributor": { + id: "meta/muse-spark-1.2-contributor", + name: "Muse Spark 1.2 Contributor", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.09999999999999999, + output: 0.19999999999999998, + cacheRead: 0.002, + cacheWrite: 0, + }, + contextWindow: 1048576, + maxTokens: 1048576, + } satisfies Model<"anthropic-messages">, "minimax/minimax-m2": { id: "minimax/minimax-m2", name: "MiniMax M2", @@ -16361,7 +17608,7 @@ export const MODELS = { } satisfies Model<"anthropic-messages">, "minimax/minimax-m2.7": { id: "minimax/minimax-m2.7", - name: "MiniMax M2.7", + name: "Minimax M2.7", api: "anthropic-messages", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", @@ -16519,7 +17766,7 @@ export const MODELS = { provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, - input: ["text"], + input: ["text", "image"], cost: { input: 0.09999999999999999, output: 0.09999999999999999, @@ -16536,7 +17783,7 @@ export const MODELS = { provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, - input: ["text"], + input: ["text", "image"], cost: { input: 0.15, output: 0.15, @@ -16604,7 +17851,7 @@ export const MODELS = { provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: false, - input: ["text"], + input: ["text", "image"], cost: { input: 0.15, output: 0.15, @@ -17016,7 +18263,7 @@ export const MODELS = { cost: { input: 1.25, output: 10, - cacheRead: 0.125, + cacheRead: 0.13, cacheWrite: 0, }, contextWindow: 400000, @@ -17084,7 +18331,7 @@ export const MODELS = { cost: { input: 1.25, output: 10, - cacheRead: 0.125, + cacheRead: 0.13, cacheWrite: 0, }, contextWindow: 400000, @@ -17118,7 +18365,7 @@ export const MODELS = { cost: { input: 0.25, output: 2, - cacheRead: 0.024999999999999998, + cacheRead: 0.03, cacheWrite: 0, }, contextWindow: 400000, @@ -17135,7 +18382,7 @@ export const MODELS = { cost: { input: 1.25, output: 10, - cacheRead: 0.125, + cacheRead: 0.13, cacheWrite: 0, }, contextWindow: 128000, @@ -17365,10 +18612,10 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 1, - output: 6, - cacheRead: 0.09999999999999999, - cacheWrite: 1.25, + input: 0.19999999999999998, + output: 1.2, + cacheRead: 0.02, + cacheWrite: 0.25, }, contextWindow: 1050000, maxTokens: 128000, @@ -17399,10 +18646,10 @@ export const MODELS = { reasoning: true, input: ["text", "image"], cost: { - input: 2.5, - output: 15, - cacheRead: 0.25, - cacheWrite: 3.125, + input: 2, + output: 12, + cacheRead: 0.19999999999999998, + cacheWrite: 2.5, }, contextWindow: 1050000, maxTokens: 128000, @@ -17618,7 +18865,7 @@ export const MODELS = { provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh", reasoning: true, - input: ["text"], + input: ["text", "image"], cost: { input: 0.09, output: 0.3, @@ -17679,6 +18926,23 @@ export const MODELS = { contextWindow: 256000, maxTokens: 256000, } satisfies Model<"anthropic-messages">, + "thinkingmachines/inkling-small": { + id: "thinkingmachines/inkling-small", + name: "Inkling Small", + api: "anthropic-messages", + provider: "vercel-ai-gateway", + baseUrl: "https://ai-gateway.vercel.sh", + reasoning: true, + input: ["text", "image"], + cost: { + input: 0.5, + output: 1.2, + cacheRead: 0.09999999999999999, + cacheWrite: 0, + }, + contextWindow: 1000000, + maxTokens: 1000000, + } satisfies Model<"anthropic-messages">, "xai/grok-4.1-fast-non-reasoning": { id: "xai/grok-4.1-fast-non-reasoning", name: "Grok 4.1 Fast Non-Reasoning", @@ -18062,9 +19326,9 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 0.95, - output: 3.15, - cacheRead: 0.19999999999999998, + input: 1, + output: 3.1999999999999997, + cacheRead: 0, cacheWrite: 0, }, contextWindow: 202800, @@ -18096,8 +19360,8 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 1.3, - output: 4.300000000000001, + input: 1.4, + output: 4.4, cacheRead: 0.26, cacheWrite: 0, }, @@ -18113,12 +19377,12 @@ export const MODELS = { reasoning: true, input: ["text"], cost: { - input: 1.4, - output: 4.4, - cacheRead: 0.26, + input: 1.1, + output: 3.851, + cacheRead: 0.275, cacheWrite: 0, }, - contextWindow: 1040000, + contextWindow: 1000000, maxTokens: 128000, } satisfies Model<"anthropic-messages">, "zai/glm-5.2-fast": { @@ -18677,24 +19941,6 @@ export const MODELS = { } satisfies Model<"anthropic-messages">, }, "zai": { - "glm-4.5-air": { - id: "glm-4.5-air", - name: "GLM-4.5-Air", - api: "openai-completions", - provider: "zai", - baseUrl: "https://api.z.ai/api/coding/paas/v4", - compat: {"supportsDeveloperRole":false,"thinkingFormat":"zai"}, - reasoning: true, - input: ["text"], - cost: { - input: 0, - output: 0, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 131072, - maxTokens: 98304, - } satisfies Model<"openai-completions">, "glm-4.7": { id: "glm-4.7", name: "GLM-4.7", @@ -18731,24 +19977,6 @@ export const MODELS = { contextWindow: 200000, maxTokens: 131072, } satisfies Model<"openai-completions">, - "glm-5.1": { - id: "glm-5.1", - name: "GLM-5.1", - api: "openai-completions", - provider: "zai", - baseUrl: "https://api.z.ai/api/coding/paas/v4", - compat: {"supportsDeveloperRole":false,"thinkingFormat":"zai","zaiToolStream":true}, - reasoning: true, - input: ["text"], - cost: { - input: 0, - output: 0, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 200000, - maxTokens: 131072, - } satisfies Model<"openai-completions">, "glm-5.2": { id: "glm-5.2", name: "GLM-5.2", @@ -18767,22 +19995,22 @@ export const MODELS = { contextWindow: 1000000, maxTokens: 131072, } satisfies Model<"openai-completions">, - "glm-5v-turbo": { - id: "glm-5v-turbo", - name: "GLM-5V-Turbo", + "glm-5.2-highspeed": { + id: "glm-5.2-highspeed", + name: "GLM-5.2 Highspeed", api: "openai-completions", provider: "zai", baseUrl: "https://api.z.ai/api/coding/paas/v4", compat: {"supportsDeveloperRole":false,"thinkingFormat":"zai","zaiToolStream":true}, reasoning: true, - input: ["text", "image"], + input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, }, - contextWindow: 200000, + contextWindow: 1000000, maxTokens: 131072, } satisfies Model<"openai-completions">, },